您的位置:首页 > 其它

[leetcode]53. Maximum Subarray

2017-11-05 18:14 411 查看

divide and conquer

题目:

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.

思路:

子串与子序列:子串是指数组中连续的若干个元素。而子序列仅仅要求各元素的顺序与其在数组中一致,而没有连续的要求。对于一个元素数为n的数组,其含有2^n个子序列和n(n+1)/2个子串。

例如:一个字符串 awbcdewgh

子串: awbc. awbcd awbcde ….很多个子串,但是都是连续在一起

子序列: abc . abcd abcde … 很多个子序列,但是子序列中的字符在字符串中不一定是连在一起的, 但是子序列一定是单调的, (即字符之间ASCII单调递增或单调递减)

动态规划

遍历整个数组,dp[i]记录以nums[i]为结尾的连续的数的段的和的最大值,即dp[i] = max(nums[i], dp[i-1]+nums[i])。然后用max记录dp[i]的最大值。

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