मान लीजिए हमारे पास पूर्णांकों का एक ऐरे nums है, एक मूव ऑपरेशन वास्तव में किसी भी एलिमेंट को चुनना और इसे 1 से घटाना है। एक ऐरे A एक जिगजैग ऐरे है यदि या तो 1 या 2 संतुष्ट होता है -
प्रत्येक इवन-इंडेक्स्ड एलिमेंट आसन्न एलिमेंट्स से बड़ा है, इसलिए 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 से बढ़ाएं
left := 100000 जब i - 1 < 0, अन्यथा nums[i - 1]
right := 100000 जब i + 1 >= nums की लंबाई, अन्यथा 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 लौटाएं
उदाहरण (पायथन)
बेहतर समझ पाने के लिए निम्न कार्यान्वयन देखें -
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