1. 程式人生 > >LintCode 最小子陣列

LintCode 最小子陣列

1.描述

給定一個整數陣列,找到一個具有最小和的子陣列。返回其最小和。

注意事項

子陣列最少包含一個數字

樣例

給出陣列[1, -1, -2, 1],返回 -3

2.分析

最小子陣列的思想與最大子陣列及其相似,具體分析見《LintCode 最大子陣列》。

3.程式碼

class Solution {
public:
    /*
     * @param nums: a list of integers
     * @return: A integer indicate the sum of minimum subarray
     */
    int minSubArray(vector<int> &nums) {
        // write your code here
        int min=nums[0];
        int n=nums.size();
        int sum=0;
        for(int i=0;i<n;i++)
        {
            sum+=nums[i];
            if(sum<min) min=sum;
            if(sum>0) sum=0;
        }
        return min;
    }
};

4.總結

問題與最大子陣列類似,區別在於當加和大於0時說明當前陣列加和為“負面影響”,因此加和大於0時sum清零。當加和小於min時,更新最小和min。具體總結見最大子陣列。