1. 程式人生 > >LintCode【簡單】44. 最小子陣列 。程式碼及思路

LintCode【簡單】44. 最小子陣列 。程式碼及思路

題目要求:

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

 注意事項

子陣列最少包含一個數字

您在真實的面試中是否遇到過這個題?  Yes 樣例

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

思路:

這個和41,最大子陣列如出一轍,這次我寫出來了……

先遍歷一遍,假如所有的數都是大於0的,那麼就返回最小的那個數。 第二遍找最小的和。

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 i;
        int min = nums[0];
        for(i = 0; i < nums.size(); i++){
            if(nums[i] < min){
                min = nums[i];
            }
        }
        if(min >= 0){
            return min;
        }
        
        int sum = 0;
        for(i = 0; i < nums.size(); i++){
            sum += nums[i];
            if(sum > 0){
                sum = 0;
            }
            if(sum < min){
                min = sum;
            }
        }
        return min;
    }
};