ধরুন আমাদের কাছে nums নামে একটি সংখ্যার তালিকা আছে, এবং আরেকটি মান k, আমাদেরকে সবচেয়ে বড় যোগফল সহ k সাবলিস্ট খুঁজে বের করতে হবে এবং অ-হ্রাস ক্রমে যোগফল ফেরত দিতে হবে।
সুতরাং, যদি ইনপুট হয় সংখ্যা =[2, 4, 5, -100, 12, -30, 6, -2, 6] k =3, তাহলে আউটপুট হবে [10, 11, 12], যেমন আমরা − [6, -2, 6], [2, 4, 5], [12] সহ এই 3টি সাবলিস্ট আছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ps :=1 + সংখ্যার একটি তালিকা এবং 0 দিয়ে পূরণ করুন
- প্রতিটি সূচক i এবং মান v সংখ্যার জন্য, করুন
- ps[i + 1] :=v + ps[i]
- hp :=একটি নতুন তালিকা
- আমি 0 থেকে ps আকারের রেঞ্জের জন্য,
- করুন
- j রেঞ্জ i + 1 থেকে ps এর আকারের জন্য, করুন
- ps হিপে -(ps[j] - ps[i]) ঢোকান
- j রেঞ্জ i + 1 থেকে ps এর আকারের জন্য, করুন
- res :=ps হিপে সমস্ত উপাদান পপ করুন এবং তাদের বিপরীত করুন
- রিটার্ন রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
heapq import heappop থেকে, heappushclass সমাধান:def solve(self, nums, k):ps =[0 for _ in range(len(nums) + 1)] এর জন্য i, v in enumerate(nums):ps[ i + 1] =v + ps[i] hp =[] রেঞ্জে i এর জন্য(len(ps)):j এর জন্য রেঞ্জে(i + 1, len(ps)):heappush(hp, -(ps[j) ] - ps[i])) রিটার্ন তালিকা(বিপরীত([-heappop(hp) _ এর জন্য রেঞ্জ(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