0
点赞
收藏
分享

微信扫一扫

LeetCode 53. 最大子序和【c++ / java 详细题解】


目录

  • ​​1、题目​​
  • ​​2、思路​​
  • ​​3、c++代码​​
  • ​​4、java代码​​

1、题目

给定一个整数数组 ​​nums​​ ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

示例 2:

输入:nums = [1]
输出:1

示例 3:

输入:nums = [0]
输出:0

示例 4:

输入:nums = [-1]
输出:-1

示例 5:

输入:nums = [-100000]
输出:-100000

提示:

  • ​1 <= nums.length <= 3 * 104​
  • ​-105 <= nums[i] <= 105​

2、思路

(动态规划)LeetCode 53. 最大子序和【c++ / java 详细题解】_leetcode

状态表示:​f[i]​​​表示以​​num[i]​​结尾的连续子数组的和的最大值

集合划分: 将集合划分为只有​​nums[i]​​​一个数,和以​​nums[i]​​为结尾的多个数组成的连续子数组两大类

状态计算:​f[i] = max(nums[i], f[i - 1] + nums[i] )​

图示
LeetCode 53. 最大子序和【c++ / java 详细题解】_新星计划_02

3、c++代码

class Solution {
public:
int maxSubArray(vector<int>& nums) {
int res = nums[0];
for(int i = 1; i < nums.size(); i++)
{
nums[i] = max(nums[i], nums[i-1] + nums[i]);
res = max(res,nums[i]);
}
return res;
}
};

4、java代码

class Solution {
public int maxSubArray(int[] nums) {
int ans = nums[0];
for(int i = 1;i < nums.length;i ++)
{
nums[i] = Math.max(nums[i],nums[i - 1] + nums[i]);
ans = Math.max(ans,nums[i]);
}
return ans;
}
}

原题链接:​​53. 最大子序和​​​LeetCode 53. 最大子序和【c++ / java 详细题解】_子数组_03


举报

相关推荐

0 条评论