leetcode No53. Maximum Subarray

来源:互联网 发布:时时彩两期计划软件 编辑:程序博客网 时间:2024/04/29 19:47

Question:

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.

Algorithm:

Kadane算法,时间复杂度为O(n),将数组从左到右分割为若干子串,使得除了最后一个子串之外,其余子串的各元素之和小于0。
代码中如果前一段子数组的和小于0,那么就丢弃它。

Accepted Code:

class Solution {public:    int maxSubArray(vector<int>& nums) {        int max_sub=0;        int max_cur=0;        int max_neg=0;    //防止出现全为负数          int flag=0;       //全为负数标志位        int first=0;      //第一个负数        for(int i=0;i<nums.size();i++)        {            max_cur+=nums[i];            if(max_cur>max_sub)                max_sub=max_cur;            if(max_cur<0)                max_cur=0;            if(nums[i]>=0&&flag==0)                flag=1;            else if(nums[i]<0&&flag==0)            {                if(first==0)                {                    first=1;                    max_neg=nums[i];                }                else if(max_neg<nums[i])                    max_neg=nums[i];            }        }        if(flag==0)return max_neg;        return max_sub;    }};


0 0
原创粉丝点击