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

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


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

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

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
//returning maximum sum window
int returnMaxSum(int A[], int B[], int n) {
   //storing elements with their count
   unordered_set<int> mp;
   int result = 0;
   int 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