最近我遇到了一个面试问题,我尝试着解决了它,但是面试官希望得到更好的解决方案。这个问题是:
给定一个包含零的源数组和一个包含数字的目标数组,返回你可以从源数组获得目标数组的最小步数。你只允许进行以下操作:在一个操作中,你可以将索引L到R之间的源数组元素的值每个增加1。
我的想法:
Let array be [4,2,3,5]
cnt=0;
For each sub-array with only non-zero element, subtract minimum of that sub-array from each of the element of that sub-array. Count increases by sum of mins in each subarray
So array becomes :
After first step : [2,0,1,3] cnt+=1*2 (because only one subarray)
After second step : [0,0,0,2] cnt+=2+1 (because two subarray, each requiring an increment operation)
After second step : [0,0,0,0] cnt+=2
有人能帮忙找到更好的算法吗?我也在考虑是否可以使用线段树/二进制索引树,但是无法想出解决方案。