MaximumSubarray

最大子序和

题目介绍

最大子序和

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

示例1:

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

示例2:

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

示例 3:

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

示例4:

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

示例5:

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

提示:

  • 1<=nums.length<=3∗104
  • −105<=nums[i]<=105

题目解法

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
31
32
33
34
package algorithm;

public class MaximumSubarray {

public static int maxSubArray(int[] nums) {

int prev = 0;
int max = Integer.MIN_VALUE;
for (int i = 0; i < nums.length; i++) {
prev = Math.max(prev + nums[i], nums[i]);
if (max < prev) {
max = prev;
}
}
return max;
}

public static void main(String[] args) {
int[] nums = new int[]{-2, 1, -3, 4, -1, 2, 1, -5, 4};
System.out.println(maxSubArray(nums));

nums = new int[]{1};
System.out.println(maxSubArray(nums));

nums = new int[]{0};
System.out.println(maxSubArray(nums));

nums = new int[]{-1};
System.out.println(maxSubArray(nums));

nums = new int[]{-100000};
System.out.println(maxSubArray(nums));
}
}

打印:

1
2
3
4
5
6
1
0
-1
-100000

思路:

思路上,就是一个简单的动态规划方程,至于发散开来的线段树目前没有写出来。


MaximumSubarray
https://yangtzeshore.github.io/2021/03/27/MaximumSubarray/
作者
Chen Peng
发布于
2021年3月27日
许可协议