কম্পিউটার

পাইথনে শুধুমাত্র একটি উপাদান মুছে ফেলার পরে সর্বাধিক এবং সর্বনিম্ন সমন্বিত সাবলিস্টের সংখ্যা খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে সংখ্যা নামক একটি তালিকা আছে এবং আমরা তালিকার সর্বাধিক একটি উপাদান মুছে ফেলতে পারি। আমাদের সর্বাধিক সংখ্যক সাবলিস্ট খুঁজে বের করতে হবে যাতে ফলাফল তালিকার সর্বোচ্চ এবং সর্বনিম্ন উভয় মানই থাকে।

সুতরাং, ইনপুট যদি nums =[3, 2, 6, 2, 4, 10] এর মত হয়, তাহলে আউটপুট হবে 8, যেমন আমরা 10 সরিয়ে দিলে আমরা পাব [3, 2, 6, 2, 4] এবং আটটি সাবলিস্ট রয়েছে যেখানে এটি সর্বোচ্চ এবং সর্বনিম্ন উভয়ই রয়েছে −

  • [২, ৬]

  • [6, 2]

  • [২, ৬, ২]

  • [৩, ২, ৬]

  • [৬, ২, ৪]

  • [২, ৬, ২, ৪]

  • [৩, ২, ৬, ২]

  • [৩, ২, ৬, ২, ৪]।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন চেক () সংজ্ঞায়িত করুন। এটি lst লাগবে

  • mn :=lst-এর সর্বনিম্ন, mx :=lst-এর সর্বোচ্চ

  • min_pos :=null, max_pos :=শূন্য

  • ret :=0

  • প্রতিটি সূচক i এবং lst-এ মান সংখ্যার জন্য, করুন

    • যদি সংখ্যা mn এর সমান হয়, তাহলে

      • min_pos :=i

    • যদি num mx এর মত হয়, তাহলে

      • max_pos :=i

    • যদি min_pos নাল হয় বা max_pos নাল হয়, তাহলে

      • পরবর্তী পুনরাবৃত্তির জন্য যান

    • ret :=ret + সর্বনিম্ন min_pos এবং (max_pos + 1)

  • রিটার্ন রিটার্ন

  • মূল পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • যদি সংখ্যার আকার <=1, তাহলে

    • সংখ্যার রিটার্ন সাইজ

  • ret :=চেক(সংখ্যা)

  • প্রতিটি rem_cand-এর জন্য [সর্বনিম্ন সংখ্যা, সর্বোচ্চ সংখ্যা], করুন

    • যদি rem_cand এর উপস্থিতি 1 হয়, তাহলে

      • idx :=সংখ্যায় rem_cand এর সূচক

      • ret :=ret এবং চেকের সর্বোচ্চ (সংখ্যা[সূচিপত্র 0 থেকে আইডিএক্স - 1] সংযুক্ত সংখ্যা [সূচী আইডিএক্স + 1 থেকে শেষ পর্যন্ত]

  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -

class Solution:
   def solve(self, nums):
      if len(nums) <= 1:
         return len(nums)
      def check(lst):
         mn, mx = min(lst), max(lst)
         min_pos, max_pos = None, None
         ret = 0
         for i, num in enumerate(lst):
            if num == mn:
               min_pos = i
            if num == mx:
               max_pos = i
            if min_pos is None or max_pos is None:
               continue
            ret += min(min_pos, max_pos) + 1
         return ret
      ret = check(nums)
      for rem_cand in [min(nums), max(nums)]:
         if nums.count(rem_cand) == 1:
            idx = nums.index(rem_cand)
            ret = max(ret, check(nums[:idx] + nums[idx + 1 :]))
      return ret
ob = Solution()
nums = [3, 2, 6, 2, 4, 10]
print(ob.solve(nums))

ইনপুট

[3, 2, 6, 2, 4, 10]

আউটপুট

8

  1. পাইথনে মার্জ করার পরে ন্যূনতম সংখ্যার রঙগুলি খুঁজে বের করার প্রোগ্রামটি থাকে

  2. পাইথনে সর্বাধিক তিনবার উপাদান আপডেট করার পরে সর্বাধিক এবং মিনিটের ন্যূনতম পার্থক্য খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে এক নম্বর থেকে অন্য নম্বর তৈরি করার জন্য প্রয়োজনীয় ন্যূনতম সংখ্যক অপারেশন খুঁজে বের করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম একটি তালিকায় সর্বাধিক এবং সর্বনিম্ন উপাদানের অবস্থান খুঁজে পেতে?