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

পাইথনে সর্বোচ্চ একটি এলিমেন্ট ডিলিট করে Max ও Min 두ই থাকা সাবলিস্টের সর্বাধিক সংখ্যা

একটি সংখ্যার লিস্ট nums দেওয়া আছে। আমরা সর্বোচ্চ একটি এলিমেন্ট ডিলিট করতে পারি। ডিলিট করার পর (অথবা না করেও) ফাইনাল লিস্টের Max ও Min দুইটাই থাকা সাবলিস্টের সর্বাধিক সংখ্যা বের করতে হবে।

উদাহরণ: nums = [3, 2, 6, 2, 4, 10] → ১০ ডিলিট করলে [3,2,6,2,4] হয়। এখানে Max=6, Min=2 ধারণ করা ৮টি সাবলিস্ট পাওয়া যায়। আউটপুট 8।

সমাধানের ধাপসমূহ

  1. check(lst) ফাংশন: লিস্টের Min ও Max বের করুন। লेफট টু রাইট স্ক্যান করে প্রতিটি পজিশনে Min ও Max-এর লাস্ট পজিশন ট্র্যাক করুন। ret += min(min_pos, max_pos) + 1।

  2. প্রথমে অরিজিনাল লিস্টে check(nums) করুন।

  3. যদি Min বা Max-এর অকারেন্স ১ হয়, তবে সেটি ডিলিট করে আবার check() করুন এবং ম্যাক্সিমাম নিন।

  4. ফাইনাল রেজাল্ট রিটার্ন করুন।

পাইথন কোড উদাহরণ

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. পাইথনে লিস্টে সর্বোচ্চ ও ন্যূনতম উপাদানের পজিশন বের করার প্রোগ্রাম