একটি সংখ্যা লিস্ট nums এবং একটি সংখ্যা k দেওয়া আছে। আমরা hoogসত একটি সাবলিস্ট মুছে ফেলতে পারি। লক্ষ্য হল ফলাফল লিস্টে k-এর চেয়ে স্ট্রিক্টলি ছোট এবং বড় উপাদানগুলো সমান হয় এমন সবচেয়ে লম্বা লিস্টের দৈর্ঘ্য বের করা।
প্রিফিক্স সম দিয়ে সমাধান: ছোট হলে +1, বড় হলে -1। শেষ প্রিফিক্স সম = delta। delta=0 হলে পুরো লিস্টই উত্তর। অন্যথায় ম্যাপ দিয়ে সাবঅ্যারে খুঁজে বের করা হয়।
ইনপুট: nums = [6,10,8,9,3,5], k = 6
আউটপুট: ৫
ব্যাখ্যা: সাবলিস্ট [9] মুছে দিলে [6,10,8,3,5] পাওয়া যায়। ছোট: ৩,৫ (২টি), বড়: ১০,৮ (২টি)।
#includeusing namespace std; class Solution { public: int solve(vector & nums, int k) { vector v(nums.size() + 1, 0); int cnt = 0; for (int i = 0; i < nums.size(); ++i) { if (nums[i] < k) ++cnt; else if (nums[i] > k) --cnt; v[i + 1] = cnt; } if (v.back() == 0) return nums.size(); int delta = v.back(); map m; int ans = INT_MAX; for (int i = 1; i <= v.size(); ++i) { if (m[v[i] - v.back()] != 0 || v[i] - v.back() == 0) { ans = min(ans, i - m[v[i] - v.back()]); } m[v[i]] = i; } if (ans == INT_MAX) return 0; else return nums.size() - ans; } }; int main(){ Solution ob; vector v = {6, 10, 8, 9, 3, 5}; int k = 6; cout << ob.solve(v, k); return 0; }
উপরোক্ত কোড রান করলে আউটপুট:
5