ধরুন আমাদের কাছে পূর্ণসংখ্যার একটি অ্যারে সংখ্যা আছে, একটি মুভ অপারেশন আসলে যেকোন উপাদান বেছে নেওয়া এবং এটিকে 1 দ্বারা হ্রাস করা। একটি অ্যারে A হল একটি জিগজ্যাগ অ্যারে যদি 1 বা 2 সন্তুষ্ট হয় −
-
প্রতিটি জোড়-সূচীযুক্ত উপাদান সন্নিহিত উপাদানগুলির চেয়ে বড়, তাই। A[0]> A[1] A[3] ... ইত্যাদি।
-
প্রতিটি বিজোড়-সূচীযুক্ত উপাদান সন্নিহিত উপাদানগুলির চেয়ে বড়, তাই। A[0] A[2] A[4] <... ইত্যাদি।
প্রদত্ত অ্যারে সংখ্যাগুলিকে একটি জিগজ্যাগ অ্যারেতে রূপান্তর করতে আমাদের সর্বনিম্ন সংখ্যক চাল খুঁজে বের করতে হবে৷
সুতরাং যদি অ্যারেটি [1,2,3] এর মত হয়, তাহলে আউটপুট হবে 2, যেমন আমরা 2 থেকে 0 বা 3 থেকে 1 কমাতে পারি
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
সমাধান() নামক একটি পদ্ধতি সংজ্ঞায়িত করুন, এটি সংখ্যা নেবে এবং শুরু করবে, এটি নীচের মত কাজ করবে -
-
k :=0
-
সংখ্যার দৈর্ঘ্য থেকে শুরু করে 2 দ্বারা বৃদ্ধি করুন
-
বাম :=100000 যখন i – 1 <0, অন্যথায় সংখ্যা[i - 1]
-
ডান :=100000 যখন i + 1>=সংখ্যার দৈর্ঘ্য, অন্যথায় সংখ্যা[i + 1]
-
temp :=(ন্যূনতম বাম এবং ডান) – 1 – সংখ্যা[i]
-
যদি temp <0, তাহলে k :=k + |temp|
-
-
k
ফেরত দিন -
প্রধান পদ্ধতিতে, এটি হবে
-
উত্তর :=সমাধান (সংখ্যা, 0)
-
উত্তর :=সর্বনিম্ন উত্তর এবং সমাধান (সংখ্যা, 1)
-
উত্তর ফেরত দিন
উদাহরণ(পাইথন)
আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −
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