lintcode-402-连续子数组求和
[402-连续子数组求和(http://www.lintcode.com/zh-cn/problem/continuous-subarray-sum/)
给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大。输出答案时,请分别返回第一个数字和最后一个数字的下标。(如果两个相同的答案,请返回其中任意一个)
样例
给定 [-3, 1, 3, -3, 4], 返回[1,4].
标签
子数组 数组
思路
参考http://blog.csdn.net/sunday0904/article/details/70224078
逐个累加求和,记录最小值和最大值的位置,最小值的下一位是丘壑最大值的起点,最大值[(sum- min)的最大值]的位置是和最大值的终点
code
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 size = A.size();
if (size <= 0) {
return vector<int>();
}
vector<int> result(2, -1);
int sum = 0, min = 0, max = INT_MIN, minIndex = -1;
for (int i = 0; i < size; i++) {
sum += A[i];
if (sum - min > max) {
max = sum - min;
result[0] = minIndex;
result[1] = i;
}
if (sum < min) {
min = sum;
minIndex = i;
}
}
result[0] = result[0] + 1;
return result;
}
};