মান ল করুন nums নামের একটি নন-নেগেটিভ সংখ্যার তালিকা এবং k নামের একটি নন-নেগেটিভ মান। এখন একটি অপারেশন আছে যেখানে nums-এ একটি পজিটিভ নম্বর সিলেক্ট করে ১ কমাতে পারি। ন্যূনতম কত অপারেশন লাগবে যাতে লিস্টের সব আডজেসেন্ট পেয়ারের যোগফল <= k হয়। জবাব বড় হলে mod 10^9+7 দিয়ে ফেরত দিন।
যদি ইনপুট হয় nums = [4, 6, 2, 5], k = 6, তবে আউটপুট হবে ৫, কারণ লিস্টকে [3, 3, 1, 4] এ ডিক্রিমেন্ট করলে মোট ৫ ডিক্রিমেন্ট লাগে। এখানে সব আডজেসেন্ট পেয়ারের যোগফল <= 6।
এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:
- m = 10^9 + 7
- ans := 0
- i কে ০ থেকে nums-এর আকার - ১ পর্যন্ত লুপ চালান:
- sm := nums[i] + nums[i+1]
- diff := max(sm - k, 0)
- nums[i+1] := nums[i+1] - diff
- যদি nums[i+1] < 0, nums[i+1] := 0
- ans := ans + diff
- ans % m ফেরত দিন
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:
উদাহরণ
m = 10 ** 9 + 7 class Solution: def solve(self, nums, k): ans = 0 for i in range(0, len(nums) - 1): sm = nums[i] + nums[i + 1] diff = max(sm - k, 0) nums[i + 1] -= diff if nums[i + 1] < 0: nums[i + 1] = 0 ans += diff return ans % m ob = Solution() nums = [4, 6, 2, 5] k = 6 print(ob.solve(nums, k))
ইনপুট
[4, 6, 2, 5], 6
আউটপুট
5