数组中的最长连续序列---dp实现
来源:互联网 发布:淘宝投诉卖家后没用啊 编辑:程序博客网 时间:2024/05/21 18:33
给定一个无序数组arr,返回其中最长的连续序列的长度。
package com.lyf.dp;import java.util.HashMap;import java.util.Map;/** * Created by fangjiejie on 2017/5/13. */public class MaxContinuousSequence { public static int getSequence(int arr[]){ int max=0;//max总是取遍历到当前位置时最大的序列长度 Map<Integer,Integer> map=new HashMap<>();//建立一个map,key为数值,value为该数值所在连续数列的长度 for(int i=0;i<arr.length;i++){ if(!map.containsKey(arr[i])){//map中不保存重复的数值 map.put(arr[i],1);//将,遍历到的数值放入map中,此时自创序列,长度为1 if(map.containsKey(arr[i]-1)){//如果存在左边相邻的数字,把这两个序列进行合并 max=Math.max(max,merge(map,arr[i]-1,arr[i])); } if(map.containsKey(arr[i]+1)){//如果存在右边相邻的数字,把这两个序列进行合并 max=Math.max(max,merge(map,arr[i],arr[i]+1)); } } } return max; } private static int merge(Map<Integer, Integer> map, int less, int more) { int length=0; int left=less-map.get(less)+1;//根据将要合并的less序列,找到这个序列里面最小的数值 int right=more+map.get(more)-1;//根据将要合并的more序列,找到这个序列里面最大的数值 length=right-left+1;//序列合并后的长度 map.put(left,length);//我们只需记录这个序列中的最小值的length map.put(right,length);//和这个序列中的最大值的length return length; } public static void main(String[] args) { int a[]={4,8,5,7,1,3,2}; System.out.println(getSequence(a)); }}
0 0
- 数组中的最长连续序列---dp实现
- 数组中的最长连续序列
- 最长连续子序列 DP
- 数组中最长连续序列
- 递归与动态规划---数组中的最长连续序列
- poj1458(DP最长连续公共子序列)
- hdu1003最长连续子序列和dp
- 数组的最长连续的序列
- 无序数组中最长连续序列
- Java实现-最长上升连续子序列
- 数组——数组中最长连续序列
- POJ2479 Maximum sum 最长连续子序列[DP]
- HDU1231最长连续子序列(最简单的DP)
- 【DP+预处理|最长连续子序列】HDU-1505 City Game
- 【DP+预处理|最长连续子序列】HDU-2870 Largest Submatrix
- 最长连续相异子序列 STL.MAP + DP
- hdu4745 Two Rabbits--最长不连续回文序列 & 区间dp
- 【最长连续序列问题】
- 如鹏java学习进程 String数组转换Int数组
- mysql多实例配置和主从配置
- Inside Bar
- 机器学习 The optimal margin classier
- Python 2.x中常见字符编码和解码方面的错误及其解决办法 总结
- 数组中的最长连续序列---dp实现
- Hibernate架构
- 勒索病毒来袭!及时备份数据吧!
- 深度学习经验总结
- myeclipse 工具点击close all 项目不再图形化界面,怎么调出来
- Android学习五 网络编程与handler消息机制
- u-boot环境变量与内核MTD分区关系[转载]
- [脑科学]-这才是心理学
- Linux 下 Java JDK 安装流程