《劍指office》連續子數組的最大和



題目描述

HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全爲正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2},連續子向量的最大和爲8(從第0個開始,到第3個爲止)。你會不會被他忽悠住?(子向量的長度至少是1)

思路:

1.首先想到的辦法就是窮舉,依次以每個數爲根基,找最大連續子向量。這樣就可以得到n個最大連續子向量,最後找出n個連續子向量中最大的那個子向量,返回即可。

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        int lens = array.length;
        int temp, sum;//注意初始值不可爲0,防止數組只有負數
        int[] result = new int[lens];
        int endRes;
        
        for(int j=0;j<lens;j++){//依次以每個數爲根基,如果有n個數,那麼我們就能找出n個最大子向量。
            sum = array[j];
            temp = array[j];
            for(int i=j+1;i<lens;i++){
                if(temp+array[i]>temp){
                    sum = temp + array[i];
                }
                temp=temp+array[i];
            }
                result[j]=sum;
        }
        
        endRes = result[0];
        
        for(int i=0;i<lens;i++){//比較n個最大子向量,找出最大的那個
            if(result[i]>endRes){
                endRes = result[i];
            }
        }
        
        return endRes;
    }
}

2.使用動態規劃法

使用動態規劃
F(i):以array[i]爲末尾元素的子數組的和的最大值,子數組的元素的相對位置不變
F(i)=max(F(i-1)+array[i] , array[i])
res:所有子數組的和的最大值
res=max(res,F(i))

如數組[6, -3, -2, 7, -15, 1, 2, 2]
初始狀態:
    F(0)=6
    res=6
i=1:
    F(1)=max(F(0)-3,-3)=max(6-3,3)=3
    res=max(F(1),res)=max(3,6)=6
i=2:
    F(2)=max(F(1)-2,-2)=max(3-2,-2)=1
    res=max(F(2),res)=max(1,6)=6
i=3:
    F(3)=max(F(2)+7,7)=max(1+7,7)=8
    res=max(F(2),res)=max(8,6)=8
i=4:
    F(4)=max(F(3)-15,-15)=max(8-15,-15)=-7
    res=max(F(4),res)=max(-7,8)=8
以此類推
最終res的值爲8
代碼:
public  int FindGreatestSumOfSubArray(int[] array) {
        int res = array[0]; //記錄當前所有子數組的和的最大值
        int max=array[0];   //包含array[i]的連續數組最大值
        for (int i = 1; i < array.length; i++) {
            max=Math.max(max+array[i], array[i]);
            res=Math.max(max, res);
        }
        return res;
}
       
發佈了37 篇原創文章 · 獲贊 80 · 訪問量 4011
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章