最大子序列和最大递增子序列
来源:互联网 发布:软件研制过程概述 编辑:程序博客网 时间:2024/06/05 16:02
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
关于这个问题,我参考了三篇博客, http://blog.csdn.net/superchanon/article/details/8228212
http://blog.csdn.net/qq_16542775/article/details/44783077
http://blog.csdn.net/ssuchange/article/details/17341693 输出子序列
package PaixuExercise;import java.util.*;public class MaxSunSequence {public static void main(String[] args){//Scanner scan = new Scanner(System.in);//while(scan.hasNext()){//int number = scan.nextInt();//int[] arr = new int[number]; //for(int i=0;i<number;i++){//arr[i] = scan.nextInt();//}//System.out.println(sumMax(arr));//System.out.println(subSequence(arr));//}testmaxSubsequence();}//只求出了最大子序列的和,并未求出最大子序列 http://blog.csdn.net/superchanon/article/details/8228212public static int sumMax(int[] arr){int maxSum = 0;int sum = arr[0];for(int i=1;i<arr.length;i++){sum+=arr[i];//if(arr[i-1]<arr[i]){ //sum += arr[i]; 最大递增子序列//}else{//sum = arr[i];//}if(sum < 0){sum = 0;}else{if(sum > maxSum){maxSum = sum;}}}return maxSum;}//http://blog.csdn.net/qq_16542775/article/details/44783077public static int subSequence(int[] arr){int sum,maxSum,start,end,cnt;int temp = 0;maxSum = 0;sum = start = end = 0;cnt = 0;for(int i=0;i<arr.length;i++){sum += arr[i];if(sum > maxSum){maxSum = sum;end = i;start = temp;}else{if(sum < 0){sum = 0;temp = i+1;cnt++;}}}if(cnt == arr.length){System.out.println("全为负数");}return maxSum;}//http://blog.csdn.net/ssuchange/article/details/17341693 输出子序列public static void maxSubsequence(int[] array) { if (array.length <= 0) return; int[] sum =new int[array.length]; int maxSum = array[0]; for (int i = 0; i < array.length; i++) { if (i == 0) sum[i] = array[i]; else { //if(sum[i-1]>=0 && arr[i-1] < arr[i]) 最大递增自序列 if (sum[i - 1] >= 0) sum[i] = sum[i - 1] +array[i]; else sum[i] = array[i]; } if (maxSum < sum[i]) maxSum = sum[i]; } System.out.println("MaxSum:\t" + maxSum); System.out.println("--------------------"); for (int i = 0; i < sum.length; i++) { if (sum[i] == maxSum) { int j = i; while (j >= 0 && sum[j] >= 0){ j--; } System.out.print("MaxSubsequence:\t"); for (j++; j <= i; j++) { System.out.print(array[j] +" "); } System.out.println(); System.out.println("--------------------"); } } System.out.println("******************"); } public static void testmaxSubsequence() { int[] array; array = new int[] { 5, -3, 4, 2 }; maxSubsequence(array); array = new int[] { 5, -6, 4, 2 }; maxSubsequence(array); array = new int[] { 5, -6, 4, 2, -10, 5, -6, 4, 2 }; maxSubsequence(array); }}
0 0
- 最大递增子序列
- 最大递增子序列
- 最大递增子序列
- 最大子序列和最大递增子序列
- hdoj 1089 最大递增子序列和
- HDOJ 1087最大递增子序列和
- HDU1087(递增子序列最大和)
- #HDU 1087 最大递增子序列和
- 最大递增(减)子序列
- 最大连续递增子序列
- hdu1025 最大递增子序列
- 最大递增子序列LIS
- 最大递增子序列问题
- dp 最大递增子序列
- 最大连续递增子序列
- 最大单调递增子序列
- 最大子序列和、最长递增子序列、最长公共子串、最长公共子序列
- 最大子序列和、最长递增子序列、最长公共子串、最长公共子序列
- 关于SQL Server/oracle将一列的多行内容拼接成一行的问题讨论
- 源码分析slf4j和logback的关系
- 想成为嵌入式程序员应知道的0x10个基本问题
- C++ 类定义与操作
- 《增广贤文》辑注
- 最大子序列和最大递增子序列
- Android中直播视频技术探究之---基础核心类ByteBuffer解析
- python学习——实例属性和类属性
- 网络连接不上的问题处理
- android multimedia的代码边读边记
- poj 3258 River Hopscotch 贪心+二分
- epoll的再次认识
- Mantis 管理Bug
- android 事件处理机制之requestDisallowInterceptTouchEvent