lintcode: Maximum Subarray

来源:互联网 发布:淘宝点收藏没反应 编辑:程序博客网 时间:2024/06/14 22:09

Given an array of integers, find a contiguous subarray which has the largest sum.
Challenge
Can you do it in time complexity O(n)?

sumSub[i]表示以第i个数结尾的子数组的最大和,则
sumSub初始化为nums;

sumSub[i]= sumSub[i-1]+nums[i]>sumSub[i]?(sumSub[i-1]+nums[i]):sumSub[i];

最后取sumSub[i]的最大值就是最大子数组

class Solution {public:        /**     * @param nums: A list of integers     * @return: A integer indicate the sum of max subarray     */    int maxSubArray(vector<int> nums) {        // write your code here        int maxSub=nums[0];        vector<int> sumSub(nums);        for(int i=1;i<nums.size();i++){            if(sumSub[i-1]+nums[i]>sumSub[i]){                sumSub[i]=sumSub[i-1]+nums[i];            }            if(sumSub[i]>maxSub){                maxSub=sumSub[i];            }        }        return maxSub;    }};

实际上用一个额外常量即可

class Solution {public:        /**     * @param nums: A list of integers     * @return: A integer indicate the sum of max subarray     */    int maxSubArray(vector<int> nums) {        // write your code here        int global=nums[0];        //vector<int> sumSub(nums);        int local=nums[0];        for(int i=1;i<nums.size();i++){           local=max(local+nums[i],nums[i]);            if(local>global){                global=local;            }        }        return global;    }};
0 0
原创粉丝点击