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

ผลรวม Subarray สูงสุด ไม่รวมองค์ประกอบบางอย่างใน C++


ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อค้นหา Subarray Sum สูงสุดที่ไม่รวมองค์ประกอบบางอย่าง

สำหรับสิ่งนี้ เราจะได้รับอาร์เรย์ขนาด M และ N สองอาร์เรย์ หน้าที่ของเราคือค้นหาอาร์เรย์ย่อยในอาร์เรย์แรก เพื่อไม่ให้มีองค์ประกอบภายในอาร์เรย์ย่อยปรากฏอยู่ในอาร์เรย์ที่สอง และองค์ประกอบของอาร์เรย์ย่อยรวมกันเป็น สูงสุด

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
//checking if element is present in second array
bool isPresent(int B[], int m, int x) {
   for (int i = 0; i < m; i++)
   if (B[i] == x)
   return true;
   return false;
}
int findMaxSubarraySumUtil(int A[], int B[], int n, int m) {
   int max_so_far = INT_MIN, curr_max = 0;
   for (int i = 0; i < n; i++) {
      if (isPresent(B, m, A[i])) {
         curr_max = 0;
         continue;
      }
      curr_max = max(A[i], curr_max + A[i]);
      max_so_far = max(max_so_far, curr_max);
   }
   return max_so_far;
}
void findMaxSubarraySum(int A[], int B[], int n, int m) {
   int maxSubarraySum = findMaxSubarraySumUtil(A, B, n, m);
   if (maxSubarraySum == INT_MIN) {
      cout << "Maximum Subarray Sum cant be found" << endl;
   } else {
      cout << "The Maximum Subarray Sum = " << maxSubarraySum << endl;
   }
}
int main() {
   int A[] = { 3, 4, 5, -4, 6 };
   int B[] = { 1, 8, 5 };
   int n = sizeof(A) / sizeof(A[0]);
   int m = sizeof(B) / sizeof(B[0]);
   findMaxSubarraySum(A, B, n, m);
   return 0;
}

ผลลัพธ์

The Maximum Subarray Sum = 7