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;
    }
};
posted @ 2017-08-13 21:01  LiBaoquan  阅读(254)  评论(0编辑  收藏  举报