最大子序列和问题
来源:互联网 发布:贵阳广电网络营业厅 编辑:程序博客网 时间:2024/06/06 05:08
给定一整数序列A1, A2,… An (可能有负数),求A1~An的一个子序列Ai~Aj,使得Ai到Aj的和最大
例如:整数序列-2, 11, -4, 13, -5, 2, -5, -3, 12, -9的最大子序列的和为21。对于这个问题,最简单也是最容易想到的那就是穷举所有子序列的方法。利用三重循环,依次求出所有子序列的和然后取最大的那个。当然算法复杂度会达到O(n^3)。
package other;import util.ArrayUtil;public class BiggestSubSequenceSum { public static void main(String[] args) { int[] a = new int[]{1,2,-1,2,-5,2,1,1}; ArrayUtil.display(a); System.out.println(fun1(a)); System.out.println(fun2(a)); System.out.println(fun4(a)); } //蛮力法 O(N*N*N) public static int fun1(int[] a){ int re = 0; for (int i = 0; i < a.length; i++) { for (int j = i; j < a.length; j++) { int sum = 0; for (int k = i; k <= j; k++) { sum+=a[k]; } if(re<sum){ re = sum; } } } return re; } //O(N*N) public static int fun2(int[] a){ int re = 0; for (int i = 0; i < a.length; i++) { int sum = 0; for (int j = i; j < a.length; j++) { sum+=a[j]; if(re<sum){ re = sum; } } } return re; } //分治法 【省略】O(logN) public static int fun3(int[] a){ return 0; } //动态规划法【最优解】O(N) public static int fun4(int[] a){ int Sum = 0; int thisSum = 0; for(int i = 0;i<a.length;i++){ thisSum+=a[i]; if(thisSum>Sum){ Sum = thisSum; }else if(thisSum<0){ thisSum = 0; } } return Sum; }}
0 0
- 最大和子序列问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题~~
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 最大子序列和问题
- 第九章 数据查询基础
- 信息论与编码——DES数据加密标准
- hdu5307 He is Flying FFT
- linux的Screen命令
- $.ajax的一些总结
- 最大子序列和问题
- 自定义ViewGroup-堆叠头像的点赞Layout
- 二叉树常见问题整理
- 什么是回调(Callback)函数
- ajax请求插件vue-resource的学习
- noip2016提高组总结
- cannot resolve symbol r
- 移动医疗系统的安全性
- Android 运行崩溃找不到so包解决方案