减少元素以在Python中制作数组之字形
假设我们有一个整数数组,移动操作实际上是选择任何元素并将其减少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
示例(Python)
让我们看下面的实现以更好地理解-
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