查找是否可以用 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 ]
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP