源地址
https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_slice_sum/
MaxSliceSum
給定一個包含有N個整數的非空數組A,一個組合 (P, Q) ,其中0 ≤ P ≤ Q < N,被叫做A的一個切片,切片 (P, Q) 的和 是 A[P] + A[P+1] + … + A[Q] 的合計.
寫一個函數,給定數組A,返回A中切片和的最大值
class Solution {
public int solution(int[] A);
}
比如:
A[0] = 3 A[1] = 2 A[2] = -6 A[3] = 4 A[4] = 0
函數返回 5 ,因爲:
- 切片(3, 4)的和爲 4,
- 切片(2, 2)的和爲 -6,
- 切片(0, 1)的和爲 5,
- 沒有切片的和比切片(0, 1)的和大,
假定:
- N是範圍在[1…1,000,000]的整數
- A中的每個元素都是範圍在 [−1,000,000…1,000,000]的整數
- 結果是範圍在[−2,147,483,648…2,147,483,647]的整數
第一步
根據 教程 ,計算出到每個點爲止最大的切片的合,然後總是留下最大的,最後得到最大的切片合
public int solution(int[] A) {
int max = A[0];
int preMax = A[0];
for (int i = 1; i < A.length; i++) {
preMax = Math.max(preMax + A[i], A[i]);
max = Math.max(max, preMax);
}
return max;
}