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

পাইথনে K সাবলিস্ট ইনক্রিমেন্ট করে মিনিমাম ভ্যালু সর্বোচ্চ করার প্রোগ্রাম


মান ল করুন nums নামের একটি সংখ্যার তালিকা এবং size, k নামে দুটি মান। এখন একটি অপারেশন আছে যেখানে size দৈর্ঘ্যের একটি কন্টিগুয়াস সাবলিস্ট নিয়ে প্রতিটি এলিমেন্ট ১ করে বাড়ানো যায়। এই অপারেশন k বার করা যাবে, nums-এ সম্ভাব্য সর্বোচ্চ মিনিমাম ভ্যালু খুঁজে বের করতে হবে।

যদি ইনপুট হয় nums = [2, 5, 2, 2, 7], size = 3, k = 2, তবে আউটপুট হবে ৩, কারণ [2, 5, 2] ইনক্রিমেন্ট করলে [3, 6, 3, 2, 7], তারপর [6, 3, 2] ইনক্রিমেন্ট করলে [3, 7, 4, 3, 7], মিনিমাম ৩।

এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:

  • একটি possible() ফাংশন সংজ্ঞায়িত করুন। এটি target গ্রহণ করবে।
  • events := N আকারের একটি তালিকা, ০ দিয়ে ভরা
  • moves := 0, s := 0
  • i কে ০ থেকে N পর্যন্ত লুপ চালান:
    • s := s + events[i]
    • delta := target - (A[i] + s)
    • যদি delta > 0: moves := moves + delta, s := s + delta, যদি i + size < N, events[i+size] := events[i+size] - delta
  • moves <= K হলে true ফেরত দিন
  • মূল মেথড থেকে: N := A-এর আকার, left := 0, right := 10^10। যখন left < right: mid := (left + right + 1) // 2। যদি possible(mid), left := mid, অন্যথায় right := mid - 1। left ফেরত দিন।

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:

উদাহরণ

class Solution:    def solve(self, A, size, K):       N = len(A)    def possible(target):       events = [0] * N       moves = s = 0       for i in range(N):          s += events[i]          delta = target - (A[i] + s)          if delta > 0:             moves += delta             s += delta             if i + size < N:                events[i + size] -= delta                return moves <= K       left, right = 0, 10 ** 10       while left < right:           mid = (left + right + 1)//2           if possible(mid):             left = mid             else:             right = mid - 1       return left ob = Solution() nums = [2, 5, 2, 2, 7] size = 3 k = 2 print(ob.solve(nums, size, k))

ইনপুট

[2, 5, 2, 2, 7], 3, 2

আউটপুট

3

  1. পাইথনে ট্রি থেকে একটি এজ কাট করে দুটি সাবট্রিের নোড ভ্যালু সামের পার্থক্য মিনিমাইজ করা

  2. পাইথনে ফেরিস হইল থেকে সর্বোচ্চ প্রফিট পাওয়ার ন্যূনতম রোটেশন বের করার প্রোগ্রাম

  3. পাইথনে বাল্টিতে বল রেখে ন্যূনতম ফোর্স সর্বোচ্চ করার প্রোগ্রাম

  4. পাইথনে রঙ মার্জ করলে অবশিষ্ট ন্যূনতম রঙের সংখ্যা বের করার প্রোগ্রাম