一个子数组最大值的问题
生活随笔
收集整理的這篇文章主要介紹了
一个子数组最大值的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
題目要求:
1、輸入一個整形數組,數組里有正數也有負數。
2、數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
3、求所有子數組的和的最大值。要求時間復雜度為O(n)
???? 發表一篇博客文章講述設計思想,出現的問題,可能的解決方案(多選)、源代碼、結果截圖、總結。
設計思路:
1、建立一個2維數組a(初定為100行2列),第一列用于存放輸入數字,第二列用于表示本字符以前的最大子數組和的值。
2、輸入任意多個數,每輸入一個數number++(number為int型用于表示數組長度),當輸入1024時停止輸入,把輸入的數存放在數組的第一列中。
3、把數組a[0][1]=a[0][0];
4、從第二個數開始進入循環,如果a[i-1][1]小于0時a[i][1]=a[i][0];如果a[i-1][1]大于0時a[i][1]=a[i][0]+a[i-1][1]
5、在比較第二列中的數,選出最大數即是子數組中和最大的
程序源碼:
package 數組問題;import java.util.Scanner;public class Shuzu {public static void main(String args[]){int[][] array=new int[100][2];int number = 0;//記錄有幾個數字Scanner sca=new Scanner(System.in);System.out.println("請輸入100以內個整數");for(int i=0;i<100;i++){array[i][0]=sca.nextInt();if(array[i][0]==1024) //以1024結束 {number=i;break;}}array[0][1]=array[0][0];for(int i=1;i<number;i++){if(array[i-1][1]<0){array[i][1]=array[i][0];}if(array[i-1][1]>=0){array[i][1]=array[i-1][1]+array[i][0];}}int max=array[0][1];for(int i=1;i<number;i++){if(array[i][1]>=max) {max=array[i][1];}}System.out.println("最大和為"+max);}}
程序截圖:
總結:相對功能還不完善,應該再找出最大子數組和的同時,也輸出最大子數組。而且以1024為輸入結束的標志也不是很好。
?
轉載于:https://www.cnblogs.com/hehejeson/articles/5360082.html
總結
以上是生活随笔為你收集整理的一个子数组最大值的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四则运算3(二柱子同学的第三炼狱)
- 下一篇: 团队介绍即项目规划