longest-consecutive-sequence,数组中最长的连续序列
来源:互联网 发布:机器视觉算法及应用 编辑:程序博客网 时间:2024/03/29 23:32
/*给定一个整形数组,求出最长的连续序列。
例如数组[100,4,200,1,3,2],最长的连续序列长度为[1,2,3,4],长度为4。
要求时间复杂度为O(n)。*/
import java.util.Arrays;
//如果不限制时间复杂度,可用这种很容易想到的方法,leetCode编译通过
public class 数组中最长连续序列 {
public int longestConsecutive(int[] num) {
//特殊情况的考虑
if(num.length==1||num.length==0){
return num.length;
}
//先对数组排序
Arrays.sort(num);
int length=0;//length记录已查的长度
int count=1;//count用来计数
for(int i=1;i<num.length;i++){
if(num[i]-1==num[i-1]){
count++;
}else if(num[i]==num[i-1]){//要考虑两个数相等的情况
continue;
}else{//如果后面减前面超过1,则重新计数
if(count>=length){//length只记更长的
length=count;
}
count=1;
}
}
return count>length?count:length;
}
//下面是左神代码面试指南书上的解法
public int longestConsecutive(int[] num) {
if(num==null||num.length==0){
return 0;
}
int maxlength=1;
//用Hasmap来存储遍历过的数,num[i]为key,该数所在序列长度为value
HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();
for(int i=0;i<num.length;i++){
//从左往右遍历,如果该数没出现过,则放入map里
if(!map.containsKey(num[i])){
map.put(num[i], 1);
if(map.containsKey(num[i]-1)){
maxlength = Math.max(maxlength, merge(map,num[i]-1,num[i]));
}
if(map.containsKey(num[i]+1)){
maxlength = Math.max(maxlength, merge(map,num[i],num[i]+1));
}
}
}
return maxlength;
}
//用来更新序列长度
public int merge(HashMap<Integer, Integer> map,int less,int more){
int left=less-map.get(less)+1;//获取要更改的那个数的位置,比如5,6,7,只改5和7的序列长度,6的不用改
int right=more+map.get(more)-1;
int len=right-left+1;
map.put(left,len);
map.put(right, len);
return len;
}
- longest-consecutive-sequence,数组中最长的连续序列
- 数组中最长的连续序列(longest consecutive sequence)
- 求数组中最长的连续序列(Longest Consecutive Sequence )
- leetcode 最长连续序列 longest consecutive sequence
- Longest Consecutive Sequence 最长连续子序列
- Longest Consecutive Sequence(最长连续序列)
- LeetCode(Longest Consecutive Sequence ) 最长连续序列
- Longest Consecutive Sequence 最长连续子序列
- *[Lintcode]Longest Consecutive Sequence最长连续序列
- Longest Consecutive Sequence最长连续序列
- 在无序序列中找出最长的连续序列 Longest Consecutive Sequence
- Longest Consecutive Sequence 从无序数组中找最长的连续数字 @LeetCode
- 一个无序整数数组中找到最长连续序列(Longest Consecutive Sequence)和两个元素使得相差最小
- 128.LeetCode Longest Consecutive Sequence(hard)[数组 排序 最长连续增长子序列]
- Longest Consecutive Sequence (最长连续序列) 【面试算法leetcode】
- LeetCode | Longest Consecutive Sequence(最长连续序列)
- leet-longest consecutive sequence length(最长连续序列长度)
- LeetCode 128. Longest Consecutive Sequence(最长连续序列)
- JSON中optString()和getString()区别
- 直接插入排序和希尔排序
- sqlserver服务器名称改成本地IP地址登录
- 图解scrollHeight, clientHeight, offsetHeight, scrollTop以及获取方法
- 批量下载搜狗词库
- longest-consecutive-sequence,数组中最长的连续序列
- linux crontab 定时执行脚本
- java中判断两个字符串是否相等的问题
- 僵尸进程和处理方式
- YARN任务pending
- java中集合类HashSet、ArrayList、LinkedList总结
- eclipse配置spark开发环境
- easyUI-textbox 如何自动获取焦点
- 原生JS|数据类型检测,并没你想象的那么简单