查找数组是否可以在C ++中分为相等总和的两个子数组

假设我们有一个数组A。我们必须检查是否可以将数组分成两部分,它们的和相等。假设元素是[6,1,3,2,5],那么[6,1]和[2,5]可以是两个子数组。

遵循这些规则可以轻松解决此问题。首先,我们必须找到数组所有元素的总和,然后对于数组中的每个元素,我们可以使用total_sum –到目前为止找到的元素总和来计算正确的总和。

示例

#include<iostream>

#include<numeric>

using namespace std;

void displaySubArray(int arr[], int left, int right) {

   cout << "[ ";

   for (int i = left; i <= right; i++)

      cout << arr[i] << " ";

      cout << "] ";

   }

   void subarrayOfSameSum(int arr[] , int n) {

      int total_sum = accumulate(arr, arr+n, 0);

      int so_far_sum = 0;

      for(int i = 0; i<n; i++){

         if(2*so_far_sum+arr[i] == total_sum){

            cout << "subarray 1: "; displaySubArray(arr, 0, i-1);

            cout << "\nsubarray 2: "; displaySubArray(arr, i+1, n-1);

               return;

         }

         so_far_sum += arr[i];

      }

   cout << "No subarray can be formed";

}

int main() {

   int arr[] = {6, 1, 3, 2, 5} ;

   int n = sizeof(arr)/sizeof(arr[0]);

   subarrayOfSameSum(arr, n);

}

输出结果

subarray 1: [ 6 1 ]

subarray 2: [ 2 5 ]

以上是 查找数组是否可以在C ++中分为相等总和的两个子数组 的全部内容, 来源链接: utcz.com/z/338213.html

回到顶部