Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Maximum possible sum of a window in an array such that elements of same window in other array are unique in C++


ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมหาผลรวมสูงสุดของหน้าต่าง (window) ในอาร์เรย์ โดยที่องค์ประกอบของหน้าต่างเดียวกันในอีกอาร์เรย์หนึ่งต้องเป็นค่าเฉพาะ (unique)

เราจะได้รับสองอาร์เรย์จำนวนสมาชิกเท่ากัน งานคือหาหน้าต่างในอาร์เรย์หนึ่งที่มีผลรวมสูงสุด โดยที่หน้าต่างเดียวกันในอีกอาร์เรย์ต้องมีค่าทั้งหมดไม่ซ้ำกัน

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

int returnMaxSum(int A[], int B[], int n) {
    unordered_set<int> 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