最大連續子序列和,以及開始、結束下標(Java)
阿新 • • 發佈:2019-02-09
對一個有n個元素的陣列,求最大的連續子陣列的和,並求其開始、結束下標。
陣列的元素必然有正數也有負數才有意義,如果全是正數,那最大的子陣列就是本身;如果全部為負數,那最大子陣列就是空陣列。
例如下面的陣列,其最大子陣列序列和為187,子陣列為X[2,..,6]:
31 | -41 | 59 | 26 | -53 | 58 | 97 | -93 | -23 | 84 |
---|
先給定一個temp,讓它從頭開始加每個數字,temp小於0時,我們重新開始計算,另temp = 0,讓開始的下標從這個位置開始。再記一個max,是我們用來存結果的,如果temp大於max,則讓max = temp,讓end下標移到這個位置.
public void maxSum(int[] nums) {
int start = 0;
int end = 0;
int max = 0;
int temp = 0;
int ts = 0;
for(int i = 0; i < nums.length; i++) {
temp += nums[i];
if(temp < 0) {
ts = i + 1;
temp = 0;
} else {
if(temp > max) {
start = ts;
end = i;
max = temp;
}
}
}
System.out.println("maxSum = " + max + ", start : " + start + ", end = " + end);
}
時間複雜度O(N)