假设我们有一个整数数组,移动操作实际上是选择任何元素并将其减少1。如果满足1或2,则数组A为锯齿形数组-
每个偶数索引元素都大于相邻元素,因此。A [0]> A [1] <A [2]> A [3] <A [4]> ...,依此类推。
每个奇数索引元素都大于相邻元素So。A [0] <A [1]> A [2] <A [3]> A [4] <...,依此类推。
我们必须找到将给定数组nums转换成锯齿形数组的最小移动次数。
因此,如果数组类似于[1,2,3],则输出将为2,因为我们可以将2减少为0或将3减少为1
为了解决这个问题,我们将遵循以下步骤-
定义一个称为resolve()的方法,它将使用nums并开始,它将按以下方式工作-
k:= 0
因为范围内的i开始为nums的长度,增加2
左:= 100000,当i – 1 <0时,否则为nums [i-1]
右:= 100000,当i +1> = num的长度时,否则nums [i +1]
temp:=(左右的最小值)– 1 – nums [i]
如果temp <0,则k:= k + | temp |
返回k
在主要方法中,它将是
ans:= solve(数字,0)
ans:= ans和solve(nums,1)的最小值
返回ans
让我们看下面的实现以更好地理解-
class Solution(object): def solve(self,nums,start): k = 0 for i in range(start,len(nums),2): left = 100000 if i-1<0 else nums[i-1] right = 10000 if i+1>=len(nums) else nums[i+1] temp= (min(left,right)-1 - nums[i]) if temp<0: k+=abs(temp) return k def movesToMakeZigzag(self, nums): ans = self.solve(nums,0) ans = min(ans,self.solve(nums,1)) return ans ob = Solution() print(ob.movesToMakeZigzag([1,2,3]))
[1,2,3]
输出结果
2