মনে করুন nums নামক একটি অ্যারে আছে (শুধু পজিটিভ ভ্যালু)। আমরা একটি সাবঅ্যারে ইরেজ করতে চাই যাতে সেটাতে সব এলিমেন্ট ইউনিক থাকে। আমাদের স্কোর হবে সাবঅ্যারে এলিমেন্টগুলোর যোগফল। ঠিক একটি সাবঅ্যারে ইরেজ করে সর্বোচ্চ স্কোর বের করতে হবে।
যেমন, ইনপুট nums = [6,3,2,3,6,3,2,3,6] হলে, আউটপুট হবে ১১, কারণ এখানে অপ্টিমাল সাবঅ্যারে হয় [6,3,2] অথবা [2,3,6], যোগফল ১১।
সমাধান পদ্ধতি
এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:
- seen := একটি নতুন ম্যাপ
- ans := sum := 0
- l := 0
- nums-এ থাকা প্রতিটি index r এবং value x-এর জন্য
- যদি x seen-এ থাকে, তবে
- index := seen[x]
- যখন l <= index, तब
- seen[nums[l]] ডিলিট করুন
- sum := sum - nums[l]
- l := l + 1
- seen[x] := r
- sum := sum + x
- ans := max(ans, sum)
- যদি x seen-এ থাকে, তবে
- ans রিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:
def solve(nums): seen = dict() ans = sum = 0 l = 0 for r, x in enumerate(nums): if x in seen: index = seen[x] while l <= index: del seen[nums[l]] sum -= nums[l] l += 1 seen[x] = r sum += x ans = max(ans, sum) return ans nums = [6,3,2,3,6,3,2,3,6] print(solve(nums))
ইনপুট
[6,3,2,3,6,3,2,3,6]
আউটপুট
11