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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP