OJ lintcode 最小子数组

给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。
注意事项
子数组最少包含一个数字
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组[1, -1, -2, 1],返回 -3

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
        int sum=0;  //记录当前最小的结果
        int min=0;  //记录最小的结果
        int p_min=nums[0];
        int flag=0;

        for(int i=0;i<nums.size();i++){
            sum=sum+nums[i];
            if(sum>0){
                sum=0;
            }
            else{
                if(min>sum){
                    min=sum;
                }
            }

            //记录数组中的最小的元素
            if(p_min>nums[i]){
                p_min=nums[i];
            }
            if(nums[i]<0){
                flag=-1; //如果flag==-1 ,也就是说明其中有一个元素是负数
            }
        }

        if(flag==-1){
            return min;  //这是存在有负数的情况
        }
        else{
            return p_min;  //这是所有元素都为整数的情况
        }
        //return min< p_min ? min:p_min;

    }
};

    原文作者:zhaozhengcoder
    原文地址: https://www.jianshu.com/p/24e3cb837e3a#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞