leetCode---Maximum Subarray

来源:互联网 发布:淘宝充值平台入口 编辑:程序博客网 时间:2024/05/15 17:30

一. 题目:Maximum Subarray

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.

二. 思路分析

假设已知0, .., i的最大和sum[i]以后,则0, ..., i+1的最大和sum[i+1]分为以下两种情况: 
1)若sum[i]>=0,则sum[i+1]=sum[i]+A[i+1]。 
2)若sum[i]<0,另起一个SubArray,令sum[i+1]=A[i+1]。在计算过程中,使用一个变量maxsum用于存储sum的最大值,一旦出现更大的sum值则更新之,最后返回该变量即可。

class Solution {public:    int maxSubArray(vector<int>& nums) {        int len = nums.size();        if(len<1){            return 0;        }        int sum[len];        sum[0]=nums[0];        int maxSum=nums[0];                 for(int i=1; i<len; i++){             if(sum[i-1]>0){                sum[i]=nums[i]+sum[i-1];            }else{                sum[i]=nums[i];            }            maxSum = max(sum[i], maxSum);         }        return maxSum;    }};

三. 总结

这种算法的空间复杂度为O(n),时间复杂度为O(n).


0 0
原创粉丝点击