दो समान आकार की सरणियाँ A और B दी गई हैं। सरणी B में एक विंडो (उपसरणी) ढूंढें जिसका योग अधिकतम हो, शर्त कि सरणी A में उसी विंडो के सभी तत्व अद्वितीय हों।
स्लाइडिंग विंडो + हैश सेट का उपयोग करें।
उदाहरण: A={0,1,2,3,0,1,4}, B={9,8,1,2,3,4,5} → अधिकतम योग 20।
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
int returnMaxSum(int A[], int B[], int n) {
unordered_set mp;
int result = 0, curr_sum = 0, curr_begin = 0;
for (int i = 0; i < n; ++i) {
while (mp.find(A[i]) != mp.end()) {
mp.erase(A[curr_begin]);
curr_sum -= B[curr_begin];
curr_begin++;
}
mp.insert(A[i]);
curr_sum += B[i];
result = max(result, curr_sum);
}
return result;
}
int main() {
int A[] = {0, 1, 2, 3, 0, 1, 4};
int B[] = {9, 8, 1, 2, 3, 4, 5};
int n = sizeof(A) / sizeof(A[0]);
cout << returnMaxSum(A, B, n);
return 0;
}
आउटपुट
20