您的位置:首页 > 其它

53. Maximum Subarray(最大子序列)

2017-08-24 20:53 120 查看
标签(空格分隔): leetcode dp

#

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.

题意:

1. 找到一个数组(包含至少一个数字)的连续子数组,其中包含最大的和。

例如;

//给定一个序列: [-2,1,-3,4,-1,2,1,-5,4]
最大和的连续序列: [4,-1,2,1]


挑战:如果您已经找出了O(n)解决方案,请尝试使用divide and conquer approach,对其他解决方案进行编码,这更为微妙。

暴力破解,结果会超时:

int sum[10000][10000];
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size();
if (len == 1)return nums[0];
int maxsum = INT_MIN;
for(int k = 0; k != len; ++k)
sum[k][k] = nums[k];

for(int i = 0; i != len;++i)
for (int j = i; j != len; ++j)
{
if (i !=j )
sum[i][j] = sum[i][j - 1] + sum[j][j];
if (sum[i][j] > maxsum)
maxsum = sum[i][j];
}

return maxsum;

}
};


o(n)的方法:

class Solution {
public:
int maxSubArray(vector<int>& nums) {
if (nums.size() < 2) return nums[0];
int endHere = nums[0];
int answer = nums[0];
for (int i = 1; i < nums.size(); ++i) {
endHere = max(endHere + nums[i], nums[i]);
answer = max(answer, endHere);
}
return answer;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: