MCPcopy Create free account
hub / github.com/algorithmzuo/videocode / Code05_MaxSubArraySum

Class Code05_MaxSubArraySum

src/videocode/Code05_MaxSubArraySum.java:3–90  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1package videocode;
2
3public class Code05_MaxSubArraySum {
4
5 public static int maxSubArraySum1(int[] arr) {
6 if (arr == null || arr.length == 0) {
7 return 0;
8 }
9 int N = arr.length;
10 int ans = Integer.MIN_VALUE;
11 for (int L = 0; L < N; L++) {
12 for (int R = L; R < N; R++) {
13 // arr[L..R]
14 int sum = 0;
15 for (int i = L; i <= R; i++) {
16 sum += arr[i];
17 }
18 ans = Math.max(ans, sum);
19 }
20 }
21 return ans;
22 }
23
24 public static int maxSubArraySum2(int[] arr) {
25 if (arr == null || arr.length == 0) {
26 return 0;
27 }
28 int N = arr.length;
29 // dp[i] : 子数组必须以arr[i]结尾的时候,子数组的最大累加和是多少?
30 int[] dp = new int[N];
31 dp[0] = arr[0]; // 0..0
32 int ans = arr[0];
33 // dp[1] -> dp[0]
34 // dp[2] -> dp[1]
35 // dp[3] -> dp[2]
36 // dp[4] -> dp[3]
37 // dp[i] => dp[i-1]
38 for (int i = 1; i < N; i++) {
39 dp[i] = Math.max(arr[i], arr[i] + dp[i - 1]);
40 ans = Math.max(ans, dp[i]);
41 }
42 return ans;
43 }
44
45 public static int maxSubArraySum3(int[] arr) {
46 if (arr == null || arr.length == 0) {
47 return 0;
48 }
49 int N = arr.length;
50 // pre -> dp[0]
51 int pre = arr[0];
52 int ans = arr[0];
53 for (int i = 1; i < N; i++) {
54 // dp[3] dp[2]
55 pre = Math.max(arr[i], arr[i] + pre);
56 ans = Math.max(ans, pre);
57 }
58 return ans;
59 }
60

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected