减少元素以在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