মনে করুন আমাদের একটি ইন্টিজার অ্যারে nums আছে, একটি মুভ অপারেশন হলো যেকোনো এলিমেন্ট বেছে নিয়ে সেটি ১ কমানো। একটি অ্যারে 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, কারণ আমরা ২ কে ০ বা ৩ কে ১ করে কমাতে পারি।
এটি সমাধান করতে আমরা নিচের ধাপগুলো ফলো করব:
solve()নামক একটি মেথড ডিফাইন করুন, এটিnumsএবংstartনেবে, এটি নিচের মতো কাজ করবে:k := 0for i in range start to len(nums), step 2left := 100000 যদি i-1 < 0, অন্যথায় nums[i-1]right := 100000 যদি i+1 >= len(nums), অন্যথায় nums[i+1]temp := (min(left, right) - 1) - nums[i]যদি
temp < 0, তবেk := k + abs(temp)
return k
মেইন মেথডে:
ans := solve(nums, 0)ans := min(ans, solve(nums, 1))return 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 = 100000 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