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;
}
};