কম্পিউটার

পাইথনে ক্রমবর্ধমান ক্রমে সবচেয়ে বড় যোগফল এবং ফেরত যোগফল সহ k সাবলিস্টগুলি খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে 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]) ঢোকান
  • 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

আউটপুট

<প্রে>[10, 11, 12]
  1. পাইথনে সমস্ত সংলগ্ন সাবলিস্টের যোগফলের যোগফল খুঁজে বের করার জন্য প্রোগ্রাম

  2. পাইথনে K এবং -K

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

  4. পাইথন প্রোগ্রাম একটি তালিকায় বৃহত্তম, ক্ষুদ্রতম, দ্বিতীয় বৃহত্তম এবং দ্বিতীয় ক্ষুদ্রতম খুঁজে পেতে?