C++程序 用于确定具有最大和的子数组的大小
给定一个数组,找出具有最大和的子数组长度。
示例:
输入:a[]={1, -2, 1, 1, -2, 1}
输出:子数组长度为2
解释:连续元素并且最大和的子数组是{1, 1}。因此长度为2
输入:a[]={-2, -3, 4, -1, -2, 1, 5, -3}
输出:子数组长度为5
解释:连续元素并且最大和的子数组是{4, -1, -2, 1, 5}。
这个问题主要是最大子序列和的一个变化。
的想法是每当以0为结尾的总和变得小于0时更新开始索引。
// C++ program to print length of the largest // contiguous array sum #include<bits/stdc++.h> using namespace std; int maxSubArraySum(int a[], int size) { int max_so_far = INT_MIN, max_ending_here = 0, start =0, end = 0, s=0; for (int i=0; i< size; i++ ) { max_ending_here += a[i]; if (max_so_far < max_ending_here) { max_so_far = max_ending_here; start = s; end = i; } if (max_ending_here < 0) { max_ending_here = 0; s = i + 1; } } return (end - start + 1); } /*Driver program to test maxSubArraySum*/ int main() { int a[] = {-2, -3, 4, -1, -2, 1, 5, -3}; int n = sizeof(a)/sizeof(a[0]); cout << maxSubArraySum(a, n); return 0; }
输出 :
5
时间复杂度: O(N),其中N是输入数组的大小。这是因为一个for循环从1到数组的大小执行。
空间复杂度: O(1),因为没有使用额外的空间。
版权声明:本页面内容旨在传播知识,为用户自行发布,若有侵权等问题请及时与本网联系,我们将第一时间处理。E-mail:284563525@qq.com