日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

求数组中的最小子数组,时间复杂度o(n),java

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 求数组中的最小子数组,时间复杂度o(n),java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

石家莊鐵道大學 信1405-1 班 唐炳輝

?

題目:給定一個整數數組,找到一個具有最小和的子數組。返回其最小和。

?

?

設計思路:兩個變量 ,一個記錄當前并入的數組的值,另外一個記錄所算過得最大的數組的值,當并入的值為小于零的時候,就沒必要進行繼續的相加了,因為再加也不可能比后邊單獨的數字大,所以,為負數就重新刷新位置,重置子數組的長度重新去找一個新的子數組

?

1 //石家莊鐵道大學 信1405-1 班 唐炳輝:三藏 2 /**給定一個數組,求出這個數組中子數組的最大值,求出,要求時間復雜度為O(n)**/ 3 package java_ketang; 4 import java.util.Scanner; 5 6 7 8 public class MinArray { 9 10 11 12 public static void main(String[] args) { 13 MinArray f = new MinArray(); 14 15 //用戶自己定義數組的長度并 自行輸入一串數組 16 17 Scanner in=new Scanner(System.in); 18 System.out.print("請輸入數組長度:"); 19 int flase0g=in.nextInt(); 20 //輸入數組中的各個數值 21 System.out.print("請依次輸入整數:"); 22 int Arr[]=new int[flase0g]; 23 for(int i=0;i<flase0g;i++) 24 { 25 Arr[i]=in.nextInt(); 26 } 27 //輸出用戶輸入的數組 28 System.out.print("您輸入的數組為 "); 29 for(int i=0;i<flase0g;i++) 30 { 31 System.out.print(Arr[i]+" ") ; 32 } 33 34 //輸出最后的結果 35 f.findMaxArr(Arr); 36 } 37 38 public void findMaxArr(int[] arr) { 39 int Arr = 0;//用來記錄當前并入的數組的和 40 int MaxArr = 0;//用來記錄之前的最大的數組和 41 int A = arr.length; 42 int Location1=0; 43 int Location2=0;//用來記錄子數組的最后一個位置 44 45 int i; 46 47 48 /**核心算法,兩個變量 ,一個記錄當前并入的數組的值,另外一個記錄所算過得最大的數組的值 49 當并入的值為小于零的時候,就沒必要進行繼續的相加了,因為再加也不可能比后邊單獨 50 的數字大,所以,為負數就重新刷新位置,重置子數組的長度重新去找一個新的子數組**/ 51 for ( i = 0; i < A; i++) { 52 Arr += arr[i]; 53 if (Arr < 0) { 54 Arr = 0; 55 56 57 } 58 if (Arr > MaxArr) { 59 MaxArr = Arr; 60 Location2=i; 61 ; 62 } 63 } 64 65 //用這個算法,通過最后的位置,和最大值來求出起始位置 66 for(i=Location2;i>=0;i--) 67 { 68 if(MaxArr-arr[i]==0) 69 { 70 Location1=i;//通過求出來的最大值和最后的那個位置,往前推移,找出起始位置 71 break;//跳出循環 72 } 73 74 } 75 /**這種情況的出現當且僅當全部的數字都為負數的時候, 76 對所有的數字求一個最大值就是最大子數組**/ 77 if (MaxArr == 0) { 78 for ( i = 0; i < A; i++) { 79 if (i == 0) { 80 MaxArr = arr[i]; 81 } 82 if (arr[i] > MaxArr) { 83 MaxArr = arr[i]; 84 } 85 } 86 } 87 //*************** 88 System.out.println("子數組的長度為"+(Location2-Location1+1)); 89 System.out.println("子數組是由第 "+(Location1+1)+" 個數到第 "+(Location2+1)+" 個數組成"); 90 System.out.println("最大子數組的和是 "+MaxArr); 91 92 } 93 }

驗證截圖

轉載于:https://www.cnblogs.com/sanzangtdashi/p/5363435.html

總結

以上是生活随笔為你收集整理的求数组中的最小子数组,时间复杂度o(n),java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。