(java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
来源:互联网 发布:sql优化 面试题 编辑:程序博客网 时间:2024/06/06 14:13
题意:
如题目所示,就是求一个数组中最大连续子序列之和并且记录开始和结束下标。
这是经典的一个动态规划问题,时间复杂度为O(N)
/** * 整数数组中求最大和最小连续子序列之和,并且记录开始和结束位置 * @author mss0m01 * */public class test {public static void main(String[] args) {int[] num=new int[]{0,-1,-5,2,3,1,-1,5,-3,2};int[] num4=new int[]{-2, 11, -4, 13, -5, 2, -5, -3, 12, -9};getmax(num);getmax(num4);getmin(num);getmin(num4);}// 求最大值 public static void getmax(int[] num){int s=0;// 起始下标int e=0;// 结束下标int max=0; // 最大值int temp=0;// 中间变量int ts=0; for(int i=0;i<num.length;i++){temp=temp+num[i];if(temp<0){ts=i+1;e=i+1;temp=0;}else{if(temp>max){s=ts;e=i;max=temp;}}}System.out.println("maxsum="+max+",start:"+s+",end="+e);}// 求最小值public static void getmin(int[] num){int s=0;int e=0;int min=0;int temp=0;int ts=0;for(int i=0;i<num.length;i++){temp=temp+num[i];if(temp>0){ts=i + 1;temp = 0;}else{if(temp<min){s=ts;e=i;min=temp;}}}System.out.println("minsum="+min+",start:"+s+",end="+e);}}
特别注意:当总和小于0的时候,应该是记录一个重新开始的坐标,到总和大于原来的max的时候才能记录新的起点坐标。阅读全文
0 0
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- 求连续子数组的最大和,并记录其起始结束位置
- 求数组最大连续子序列和
- 求最大连续子数组之和
- 求最大连续子数组之和
- 给定整数序列求连续子串最大和
- java编程:无序整数序列,求连续子串最大和问题
- 分治法求数组最大连续子序列的和
- 求数组的连续子序列最大和
- 求一个整型数组中的最大连续子序列和
- 最大连续子序列之和
- 最大连续子序列之和
- 最大连续子序列之和
- 最大连续子序列之和
- 最大连续子序列之和
- 最大子连续序列之和
- 最大连续子序列之和
- 硬盘分区(主分区、扩展分区、逻辑分区)
- csv文件导出时分列问题
- 奇技淫巧:交叉编译环境的开发多窗口切换太麻烦(不是很理想)
- 欢迎使用CSDN-markdown编辑器
- 关于在jstl标签中forEach使用的一个坑
- (java)整数数组中求最大连续子序列之和,并且记录开始和结束位置
- 【解决】redis启动权限问题
- 操作给定的二叉树,将其变换为源二叉树的镜像。
- 最短路变形 nyoj1248、poj1797 dijkstra+堆优化
- sdk兼容性总结---随时更新补充
- ajaxfileupload.js+springMVC实现多个图片与数据同一个ajax方法上传
- 为啥显示器用RGB而打印机用CMYK
- 常见错误及解决方法及代码
- BootLoader启动过程分析