一個整形數組中有正數也有負數,數組中連續一個或多個組成子數組,每個子數組都有一個和,求所有子數組中和的最大值


本文只作為學習筆記,如若侵權請告知,一定及時刪除

題目

輸入一個整型數組,數組里有正數也有負數。數組中一個或者連續的多個整數組成一個字數組。求所有字數組的和的最大值。要求時間復雜度為O(n)。例如輸入的數組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組為3, 10, -4, 7, 2,因此輸出為該子數組的和18
  • 1
  • 2

思路

因為時間復雜度為O(n),則只能遍歷一次數組,這里同時使用兩個變量sum和max,其中sum保存的是當前的和,若sum<0,則從下一個位置從新記錄,max記錄的是歷史的最大值,只有當sum>max時用sum替換max。
  • 1
  • 2

代碼

public class Item { public static void main(String args[]) { int array[] = {1, -2, 3, 10, -4, 7, 2, -5}; System.out.println(findMax(array)); } public static int findMax(int array[]){ //加上約束條件,防止當數組為空時造成數組越界 if (array.length == 0) { return 0; } int max = array[0]; int sum = 0; for(int i=0; i<array.length; i++){ //如果加上某個元素sum>=0的話,就加; //當數組全為負數的時候只要有加法就一定比原來的數小,此時就相當於找出數組內最大的數 if(sum >= 0) { sum += array[i]; } else{ sum = array[i]; //否則從當前位置重新計算 } if(sum > max){ max = sum; } } return max; } }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM