一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 求最大子數(shù)組之和的方法解析(2種可選)

求最大子數(shù)組之和的方法解析(2種可選)

2020-07-18 12:37一個弱者想變強 Java教程

本文主要對求最大子數(shù)組之和的方法進行詳細解析,列了兩種方法供大家選擇借鑒,需要的朋友一起來看下吧

問題描述:一個有n個元素的數(shù)組,這n個元素可以是正數(shù)也可以是負數(shù),求最大子數(shù)組的和。

方法1:蠻力法

思路:最簡單也是最容易想到的方法就是找出所有子數(shù)組,然后求所有子數(shù)組的和,在所有子數(shù)組的和中取最大值。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
  * 方法1(蠻力法):兩次循環(huán)求最大子數(shù)組之和
  */
 public static int maxSubArray1(int[] a){
  int i,j;
  int ThisSum=0;
  int MaxSum=0;
  for (i = 0; i < a.length; i++) {
   ThisSum=a[i];
   for(j=i+1;j<a.length;j++){
    ThisSum+=a[j];
    if(ThisSum>MaxSum){
     MaxSum=ThisSum;
    }
   }
  }
  return MaxSum;
 }

方法2:優(yōu)化的動態(tài)規(guī)劃

思路:首先可以根據(jù)數(shù)組的最后一個元素a[n-1]與最大子數(shù)組的關(guān)系分為以下三種情況:

1) 最大子數(shù)組包含a[n-1],即以a[n-1]結(jié)尾。

2) a[n-1]單獨構(gòu)成最大子數(shù)組。

3) 最大子數(shù)組不包含a[n-1],那么求a[1,...,n-1]的最大子數(shù)組可以轉(zhuǎn)換為求a[1,...,n-2]的最大子數(shù)組。

通過上述分析可以得出如下結(jié)論:假設(shè)已經(jīng)計算出(a[0],...a[i-1])最大的一段數(shù)組和為All[i-1],同時也計算出(a[0],...a[i-1])中包含a[i-1]的最大的一段數(shù)組和為End[i-1],

則可以得出如下關(guān)系:All[i-1]=max{a[i-1],End[i-1],All[i-1]}。利用這個公式和動態(tài)規(guī)劃的思想解決問題。(代碼中還解決了起始位置,終止位置的問題)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
  * 方法2:優(yōu)化的動態(tài)規(guī)劃方法
  * nEnd就是通過“數(shù)組依次相加加到a[i],然后與a[i]做比較”得來的,保存較大的。因為如果前面的數(shù)加到a[i]
  * 還沒有a[i]本身大,那么前面的數(shù)也就對最大子數(shù)組和沒有貢獻。厲害
  * nAll就是記錄一下之前的新得到的nEnd和自身之前誰更大
  */
 public static int max(int m,int n){
  return m>n?m:n;
 }
 public static int maxSubArray2(int[] a){
  int nAll=a[0];//有n個數(shù)字數(shù)組的最大子數(shù)組之和
  int nEnd=a[0];//有n個數(shù)字數(shù)組包含最后一個元素的子數(shù)組的最大和
  for (int i = 1; i < a.length; i++) {
   nEnd=max(nEnd+a[i],a[i]);
   nAll=max(nEnd, nAll);
  }
  return nAll;
 }
 private static int begin=0;
 private static int end=0;
 /**
  * 求出最大子數(shù)組的開始begin,結(jié)尾end,以及整個子數(shù)組
  */
 public static int maxSubArray3(int[] a){
  int maxSum=Integer.MIN_VALUE;
  int nSum=0;
  int nStart=0;
  for (int i = 0; i < a.length; i++) {
   if(nSum<0){
    nSum=a[i];
    nStart=i;
   }
   else{
    nSum+=a[i];
   }
   if(nSum>maxSum){
    maxSum=nSum;
    begin=nStart;
    end=i;
   }
  }
  return maxSum;
 }

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持服務(wù)器之家!

原文鏈接:http://www.cnblogs.com/winorgohome/p/6038320.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女流白浆 | 亚欧洲乱码专区视频 | 国产精品每日在线观看男人的天堂 | 日本福利视频网站 | 日本久本草精品 | 动漫美女被羞羞产奶 | 边吃胸边膜下刺激免费男对女 | 亚洲gogo人体大胆西西安徽 | t66y地址一地址二地址三 | 欧美同性猛男videos | 美女曰逼视频 | 久久久久免费视频 | 亚洲国产成人超福利久久精品 | 精品久久久久香蕉网 | 奇米影视4444 | 激情偷拍网 | 人体欣赏孕妇季玥图片 | www亚洲视频| 天美网站传媒入口网址 | 国产欧美日韩视频在线观看一区二区 | 久久久久久久久女黄 | 欧美3p大片在线观看完整版 | 国产成人精品午夜免费 | 色戒完整版2小时38分钟 | 午夜看片a福利在线观看 | 34g污奶跳舞 | 色多多绿巨人视频 | 亚洲一卡2卡三卡4卡5卡组 | 免费黄色网站视频 | 色综合久久六月婷婷中文字幕 | 男人捅女人的鸡鸡 | 亚洲欧美久久一区二区 | 99久久综合九九亚洲 | 国产精品一区二区久久 | 污文啊好棒棒啊好了 | 国产三级跑 | 2021年国内自拍 | 草馏社区最新1024 | 国产馆精品推荐在线观看 | 欧美亚洲天堂 | 肉车各种play文r |