中等 · 普通数组 · 原题
题目信息
LeetCode #53 · Maximum Subarray
标签:数组、分治、动态规划
题目要求
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
1 2 3
| 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
|
示例 2:
示例 3:
1 2
| 输入:nums = [5,4,-1,7,8] 输出:23
|
提示:
1 <= nums.length <= 10^5
-10^4 <= nums[i] <= 10^4
进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { public: int maxSubArray(vector<int>& nums) { int ans=INT_MIN; int min_pre_sum=0; int pre_sum=0; for(int x:nums){ pre_sum+=x; ans=max(ans,pre_sum-min_pre_sum); min_pre_sum=min(min_pre_sum,pre_sum); } return ans; } };
class Solution { public: int maxSubArray(vector<int>& nums) { vector<int> dp(nums.size()); dp[0]=nums[0]; int ans=dp[0]; for(int i=1;i<nums.size();i++){ dp[i]=max(dp[i-1]+nums[i],nums[i]); ans=max(ans,dp[i]); } return ans; } };
|
返回目录
评论
评论
留言服务尚未连接。
正在打开留言簿……