LintCode 44. 最小子数组

来源:互联网 发布:切糕事件知乎 编辑:程序博客网 时间:2024/06/04 19:47

思路:

可将问题分解为以当前数为结尾的最小子数组.

设以当前数为结尾的最小子数组为minSub[i],则对数组中的每一个数进行遍历,取minSub[i]的最小值即可.

1. i == 0, 则minSub[i] = nums[0];

2. i != 0, 则: minSub[i] = (minSub[i - 1] > 0)?nums[i]:(minSub[i - 1] + nums[i]);

图示:


代码:

class Solution {public:    /**     * @param nums: a list of integers     * @return: A integer denote the sum of minimum subarray     */    int minSubArray(vector<int> nums) {        // write your code here        if(nums.empty())            return 0;        int min_result = nums[0];        vector<int> minSub(nums.size(), nums[0]);        for(int i = 1;i < nums.size(); ++i){            minSub[i] = (minSub[i - 1] > 0)?nums[i]:(minSub[i - 1] + nums[i]);            if(minSub[i] < min_result)                min_result = minSub[i];        }        return min_result;    }};


0 0
原创粉丝点击