একটি সংখ্যার লিস্ট nums দেওয়া আছে। আমরা সর্বোচ্চ একটি এলিমেন্ট ডিলিট করতে পারি। ডিলিট করার পর (অথবা না করেও) ফাইনাল লিস্টের Max ও Min দুইটাই থাকা সাবলিস্টের সর্বাধিক সংখ্যা বের করতে হবে।
উদাহরণ: nums = [3, 2, 6, 2, 4, 10] → ১০ ডিলিট করলে [3,2,6,2,4] হয়। এখানে Max=6, Min=2 ধারণ করা ৮টি সাবলিস্ট পাওয়া যায়। আউটপুট 8।
সমাধানের ধাপসমূহ
check(lst)ফাংশন: লিস্টের Min ও Max বের করুন। লेफট টু রাইট স্ক্যান করে প্রতিটি পজিশনে Min ও Max-এর লাস্ট পজিশন ট্র্যাক করুন।ret += min(min_pos, max_pos) + 1।প্রথমে অরিজিনাল লিস্টে
check(nums)করুন।যদি Min বা Max-এর অকারেন্স ১ হয়, তবে সেটি ডিলিট করে আবার
check()করুন এবং ম্যাক্সিমাম নিন।ফাইনাল রেজাল্ট রিটার্ন করুন।
পাইথন কোড উদাহরণ
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