1. 程式人生 > >最大連續子序列和,以及開始、結束下標(Java)

最大連續子序列和,以及開始、結束下標(Java)

對一個有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)