国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

求一個數組中最大連續子序列的和

2019-11-14 22:30:55
字體:
來源:轉載
供稿:網友
求一個數組中最大連續子序列的和10.求一個數組中最大連續子序列的和

參考鏈接:http://blog.csdn.net/butwang/article/details/4691974

思路:如果已經知道在前0~k-1共k個元素中,在最大和為MaxAll[k-1], 怎么求0~k共k+1個元素的MaxAll[k]。 如果前k個元素的最大和子序列包括a[k-1],則很容易知道MaxAll[k] = max(MaxAll[k-1] + a[k], a[k])。那如果前k個元素的最大和子序列不包括a[k-1]呢?在數組后面增加一個元素,會改變數組最后面子序列的和,因此MaxAll[k] = max(MaxAll[k-1], MaxAll[k-1] + a[k], a[k])。定義EndMax[k-1]為前k個元素中包括a[k-1]的最大子序列和。則遞推公式如下:

EndMax[k] = max(EndMax[k-1] + a[k], a[k])

MaxAll[k] = max(MaxAll[k-1], EndMax[k])

可以看出,沒有必要使用兩個數組,可以使用兩個變量取代MaxAll[k]和EndMax[k]。

代碼:

 1 package algorithm; 2  3 public class maxSubSum { 4     // 求一個數組中最大子序列的和 5     public static void main(String[] args) { 6         int a[] = { -3, 3, -1, 4, -2, -1 }; 7  8         int AllMax = a[0]; 9         int EndMax = a[0];10 11         int AllMaxStart = 0, AllMaxEnd = 0, EndMaxStart = 0, EndMaxEnd = 0;12 13         for (int i = 1; i < a.length; i++) {14             if (EndMax + a[i] > a[i]) {15                 EndMax = EndMax + a[i];16                 EndMaxEnd = i;17             } else {18                 EndMax = a[i];19                 EndMaxStart = i;20                 EndMaxEnd = i;21             }22             23             if (EndMax > AllMax) {24                 AllMax = EndMax;25                 AllMaxStart = EndMaxStart;26                 AllMaxEnd = EndMaxEnd;27             }28         }29         30         System.out.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鄂伦春自治旗| 察哈| 得荣县| 云安县| 赤水市| 甘孜县| 朔州市| 长葛市| 赞皇县| 慈利县| 清涧县| 毕节市| 扶绥县| 黔西县| 开远市| 孝感市| 江阴市| 吉林市| 屏东市| 禄丰县| 运城市| 潢川县| 安康市| 武乡县| 南乐县| 错那县| 阿鲁科尔沁旗| 乌兰察布市| 宝丰县| 漾濞| 铁岭县| 五莲县| 兴业县| 綦江县| 镇雄县| 保康县| 武威市| 井研县| 金山区| 呼玛县| 桐梓县|