LeetCode 53. Maximum Subarray
LeetCode 53. Maximum Subarray (最大子序和)
题目
链接
https://leetcode-cn.com/problems/maximum-subarray
问题描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例
这边有动态规划的思想在里面,从头到尾遍历,如果和小于0,那么直接无视,重新开始,和大于0,就加上之前的和。每次都保留当前最大的和,直到输出。
提示
1 <= nums.length <= 105
-104 <= nums[i] <= 104
思路
这边有动态规划的思想在里面,从头到尾遍历,如果和小于0,那么直接无视,重新开始,和大于0,就加上之前的和。每次都保留当前最大的和,直到输出。
复杂度分析
时间复杂度 O(n)
空间复杂度 O(1)
代码
Java
public static int maxSubArray(int[] nums) {
int ans = nums[0];
int sum = 0;
for (int num : nums) {
if (sum >= 0) {
sum += num;
} else {
sum = num;
}
ans = Math.max(sum, ans);
}
return ans;
}