劍指offer 30:連續子數組的最大和--- Java實現

劍指offer每日一題算法題(java解法)

方便日後複習,從今天開始。

算法之行始於足下

[編程題]連續子數組的最大和-- Java實現

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

前提:
1.理解集合類的sort排序方法,默認調用是升序
2.與我上一篇用的思路一樣,劍指offer 28,最小的k個數
解題思路:
1.從頭節點累加到尾部,就是以頭節點開始的所有子序列。所以每一步sum累加的和就是子序列的值.
2.不用讓頭節點往回算序列因爲往回算的序列,已經被前面的頭節點算過了。
例如:1,2,3包括了:
以1爲頭節點:{1},{1,2},{1,2,3}
以2爲頭節點:{2},{2,3}。這時就不用{2,1}了,因爲前一次已 經計算過了值,子序列最大值跟順序無關

import java.util.*;
public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        ArrayList<Integer> s=new ArrayList<Integer>();
        if(array.length==1) return array[0];
        int a=0;//計算下標
        int sum=0;//計算累加的當前子序列之和的值
        while(a<array.length){
          for(int i=a;i<array.length;i++){
              sum+=array[i];    
              s.add(sum);
          }
            a++; //計算完以頭節點的所有子序列,就a加1,移動頭節點,因爲要開始下一個頭節點的計算
            sum=0; //清空子序列的和
        }
        Collections.sort(s);
        return s.get(s.size()-1);
    }
}
發佈了56 篇原創文章 · 獲贊 11 · 訪問量 2035
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章