কম্পিউটার টিউটোরিয়াল

পাইথনে এলিমেন্ট কমিয়ে অ্যারেকে জিগজ্যাগ বানানো


মনে করুন আমাদের একটি ইন্টিজার অ্যারে 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 := 0

    • for i in range start to len(nums), step 2

      • left := 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

  1. পাইথনে Product of Array Except Self (নিজের বাদে সব উপাদানের গুণফল)

  2. পাইথনে অ্যারে সব উপাদান সমান করার জন্য অপারেশনের সংখ্যা

  3. পাইথনে অ্যারেতে ডিস্টিনক্ট এলিমেন্ট গণনা

  4. পাইথনে Bisect - অ্যারে বাইсекশন অ্যালগরিদম