Python 中使数组成为之字形的最小操作数
假设我们有一个包含整数的数组 nums,一个移动操作实际上是选择任何元素并将其减少 1。如果满足 1 或 2,则数组 A 是一个之字形数组 -
每个偶数索引元素都大于相邻元素,因此。A[0] > A[1] < A[2] > A[3] < A[4] > ... 等等。
每个奇数索引元素都大于相邻元素,因此。A[0] < A[1] > A[2] < A[3] > A[4] < ... 等等。
我们必须找到将给定数组 nums 转换为之字形数组的最小移动次数。
因此,如果数组类似于 [1,2,3],则输出将为 2,因为我们可以将 2 减少到 0 或 3 减少到 1
为了解决这个问题,我们将遵循以下步骤 -
定义一个名为 solve() 的方法,它将获取 nums 和 start,它将按如下方式工作 -
k := 0
对于 i 从 start 到 nums 的长度,增加 2
当 i – 1 < 0 时,left := 100000,否则 nums[i - 1]
当 i + 1 >= nums 的长度时,right := 100000,否则 nums[i + 1]
temp := (left 和 right 的最小值) – 1 – nums[i]
如果 temp < 0,则 k := k + |temp|
返回 k
在主方法中,它将是
ans := solve(nums, 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
广告