描述:給定一個整數(shù)數(shù)組矗积,請找出一個連續(xù)子數(shù)組,使得該子數(shù)組的和最大。輸出答案時盐捷,請分別返回第一個數(shù)字和最后一個數(shù)字的下標偶翅。(如果存在多個答案,請返回字典序最小的)
思路:ans 記錄最大值,sum表示lefg,right間數(shù)組和碉渡,遍歷數(shù)組聚谁,若sum < 0,則更新left,right值,否則只把right位置更新滞诺。然后sum,ans值比較形导,更新ans值和left,right值
class Solution {
public:
/*
* @param A: An integer array
* @return: A list of integers includes the index of the first number and the index of the last number
*/
vector<int> continuousSubarraySum(vector<int> &A) {
// write your code here
int ans = INT_MIN;
int sum = 0;
int left = 0;
int right = 0;
vector<int> ints(2,0);
//ans 記錄最大值,sum表示lefg,right間數(shù)組和,遍歷數(shù)組习霹,若sum < 0,則更新left,right值骤宣,否則只把right位置更新。
//然后sum,ans值比較序愚,更新ans值和left,right值
for( int i = 0; i < A.size(); ++i )
{
if( sum < 0 )
{
sum = A[i];
left = right = i;
}
else
{
sum += A[i];
right = i;
}
if( sum > ans )
{
ans = sum;
ints[0] = left;
ints[1] = right;
}
}
return ints;
}
};