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

পাইথনে kটি সবচেয়ে বড় সাবলিস্ট সাম বের করে অ্যাসেন্ডিং অর্ডারে রিটার্ন করার প্রোগ্রাম


মান লক্ষ্য করুন আমাদের কাছে একটি সংখ্যার তালিকা nums এবং অন্য একটি মান k আছে। আমাদের কাজ হল সবচেয়ে বড় যোগফল বিশিষ্ট kটি সাবলিস্ট বের করা এবং তাদের যোগফলগুলোকে নন-ডিক্রিজিং অর্ডারে রিটার্ন করা।

উদাহরণস্বরূপ, যদি ইনপুট হয় nums = [2, 4, 5, -100, 12, -30, 6, -2, 6] এবং k = 3, তবে আউটপুট হবে [10, 11, 12], কারণ সবচেয়ে বড় যোগফল বিশিষ্ট ৩টি সাবলিস্ট হল: [6, -2, 6] (যোগফল ১০), [2, 4, 5] (যোগফল ১১), [12] (যোগফল ১২)।

সমাধানের ধাপসমূহ:
  • ps := [0] * (len(nums) + 1) (প্রিফিক্স সাম অ্যারে)
  • প্রতিটি ইনডেক্স i এবং ভ্যালু v এর জন্য nums-এ:
    • ps[i+1] := v + ps[i]
  • hp := [] (হিপ)
  • i কে ০ থেকে len(ps) পর্যন্ত লুপ চালান:
    • j কে i+1 থেকে len(ps) পর্যন্ত লুপ চালান:
      • -(ps[j] - ps[i]) কে hp-তে পুশ করুন (ম্যাক্স হিপ অনুকরণ)
  • res := hp-র সব এলিমেন্ট পপ করে রিভার্স করুন।
  • res রিটার্ন করুন।
উদাহরণ কোড
from heapq import heappop, heappush

class Solution:
    def solve(self, nums, k):
        ps = [0 for _ in range(len(nums) + 1)]
        for i, v in enumerate(nums):
            ps[i + 1] = v + ps[i]
        hp = []
        for i in range(len(ps)):
            for j in range(i + 1, len(ps)):
                heappush(hp, -(ps[j] - ps[i]))
        return list(reversed([-heappop(hp) for _ in range(k)]))

ob = Solution()
nums = [2, 4, 5, -100, 12, -30, 6, -2, 6]
k = 3
print(ob.solve(nums, k))
ইনপুট
[2, 4, 5, -100, 12, -30, 6, -2, 6],3
আউটপুট
[10, 11, 12]
  1. পাইথনে সব সन्नিহিত সাবলিস্টের যোগফলের যোগফল বের করার প্রোগ্রাম

  2. পাইথনে লিস্টে k এবং -k উভয়ই আছে এমন সর্বোচ্চ k বের করার প্রোগ্রাম

  3. পাইথনে সবচেয়ে বড় সংখ্যা

  4. পাইথনে লিস্ট থেকে সর্বোচ্চ, সর্বনিম্ন, দ্বিতীয় সর্বোচ্চ ও দ্বিতীয় সর্বনিম্ন বের করা