求数组最大子数组的和
2016-06-14 20:51
387 查看
public class MaxSubArray { //求最大子数组的和 //暴力求解 public static int getMaxChildA(int[] a){ int i,j,low=0,high=0; int addMax = 0; int temp = 0; for(i=0;i<a.length;i++){ for(j=i;j<a.length;j++){ temp += a[j]; if(addMax < temp){ addMax = temp; low = i; high = j; } } temp = 0; } return addMax; } //时间复杂度为o(n) /** * 思路:设前n项和为sum, * 若前i-1项和大于零,加上第i项后小于0了,则最小子序列从a[i+1]项开始,继续向后加 * 若前i-1项和大于零,加上第i项后大于零,则继续向后加 * @param arr * @return */ static int findMaxArr3(int[] arr) { int max = arr[0];// 最大值 int sum = 0;// 求和 int startIndex = 0; int endIndex = 0; for (int i = 0; i < arr.length; i++) { if (sum >= 0) { sum += arr[i]; } else { sum = arr[i];//前i-1项和小于0,最大子序列从第i项开始 startIndex = i;// 最大子数组开始值 } if (sum > max) { max = sum; endIndex = i;// 最大子数组结束值 } } System.out.println(startIndex+":"+endIndex); return max; } public static void main(String[] args) { // TODO Auto-generated method stub int[] a = {1,-2,4,8,-4,7,-1,-5}; System.out.println(findMaxArr3(a)); } }
相关文章推荐
- android中的数据存储
- Java千百问_04异常处理(006)_常见的Java异常有哪些(运行时)
- 【HTML5】SVG内联
- DCOS实践分享(2):基于Docker Compose和Swarm的Docker化之路
- DCOS实践分享(1):基于图形化模型设计的应用容器化实践
- 陕南蜂蜜特点,陕南土蜂蜜怎么样?
- mstsc解决远程桌面连接提示"远程终端连接数超过了允许连接数"
- TIJ 复习笔记6
- LR场景运行提示:This Vuser already started a transaction with the same name, and has not yet processed the
- MySQL5.7 SLAVE监控zabbix报警 报错Slave_SQL_Running_State: invalidating query cache entries (table)处理
- eclipse连接SqlServer2008(被它搞得惨兮兮)
- Hadoop源码分析:Hadoop编程思想
- C#中的扩展方法
- android中保存Bitmap图片写入Sdcard
- Linux Char-Driver (字符驱动 摘要)(一)
- Java源代码分析之StringBuffer
- linux网络编程--TCP/IP协议
- linux下环境变量PS1设置
- Hadoop源码分析(3): Hadoop的运行痕迹
- Ubuntu16.04下Sublime Text 3解决无法输入中文的方法