Given an integer array nums, find the contiguous subarray (containing
at least one number) which has the largest sum and return its sum.Example:
Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has
the largest sum = 6. Follow up:If you have figured out the O(n) solution, try coding another solution
using the divide and conquer approach, which is more subtle.
暴力遍历,1340ms
//3 temp
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size();
vector<int> temp(len,0);
int maxval = nums[0];
for (int i = 0; i < len; i++) {
temp[i] = nums[i];
if (temp[i]>maxval) {
maxval = temp[i];
}
}
for (int i = 0; i < len; i++) {
vector<int> temp(len, nums[i]);
for (int j = i+1; j < len; j++) {
temp[j]= temp[j - 1] + nums[j];
if (temp[j] > maxval) {
maxval = temp[j];
}
}
}
return maxval;
}
};
动态规划4ms
//3 temp
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size(),maxval=nums[0];
vector<int> dp(len, nums[0]);
for (int i = 1; i < len;i++) {
if (dp[i - 1]>0) {
dp[i] = dp[i - 1] + nums[i];
maxval = max(dp[i],maxval);
}
else
{
dp[i] = nums[i];
maxval = max(dp[i], maxval);
}
}
return maxval;
}
};