【发布时间】:2018-10-31 05:00:55
【问题描述】:
最近我遇到了一个面试问题。我尝试解决它,但面试官正在寻找更好的解决方案。问题是:
给定一个包含零的源数组和包含 numbers,返回您可以获得的最小步数 从源头瞄准。您只能进行以下操作: 您可以将源数组元素的值从 在一次操作中索引 L 到索引 R。
我的想法:
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
有人可以帮助找到更好的算法吗?我也在考虑是否也可以使用段树/二叉索引树但无法提出解决方案。
【问题讨论】:
标签: arrays algorithm segment-tree