求子数组的最大和

来源:互联网 发布:java表白程序 编辑:程序博客网 时间:2024/05/14 05:54

方法1:找出所有子数组,计算每个子数组的和,并返回最大值。

#include <iostream>using namespace std;//值最大的子树组int MaxSubArrayValue(int *num, int len){int sum = 0;int max = -1<<31;//max初始值为一个最小负值for (int i = 0; i < len; ++i){for (int j = 0; j <= i; ++j){for (int k = j; k < (len - i) + j; ++k){sum += num[k];}if (max < sum){max = sum;}sum = 0;}}return max;}int main(){int num[10] = {-1, 2, 8, 0, -3, 6, 3, 8, -7, 4};int n = MaxSubArrayValue(num, 10);cout<<n<<endl;return 1;}

方法2:运用动态规划的思想,时间复杂度能达到O(n)

#include <iostream>using namespace std;void MaxSubArray(int arr[], int n){int max = -1<<31;int sum = 0;for (int i = 0; i < n; ++i){if (sum + arr[i] > arr[i]){sum += arr[i];}else{sum = arr[i];}if (sum > max){max = sum;}}cout<<max<<endl;}int main(){int arr[] = {-1, 2, 8, 0, -3, 6, 3, 8, -7, 4};MaxSubArray(arr, 10);return 1;}


原创粉丝点击