Longest Consecutive Sequence
来源:互联网 发布:java获取浏览器语言 编辑:程序博客网 时间:2024/06/01 10:44
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
Your algorithm should run in O(n) complexity.
public class Solution { public int longestConsecutive(int[] num) { Set<Integer> set = new HashSet<Integer>(); int LEN = 0; int len = 0; for(int i = 0; i < num.length ; i ++){//将元素添加到容器中,方便查找O(1) set.add(num[i]); } //从任意元素开始查找它的前后元素,存在len++,删除此元素,不存在,则退出 for(int i = 0 ; i < num.length ; i ++){ len = 1; if(set.contains(num[i])){//不存在说明已经访问过了 int right = num[i] + 1; int left = num[i] - 1; while(set.contains(right)){ len++; set.remove(right); right++; } while(set.contains(left)){ len++; set.remove(left); left--; } if(len > LEN){ LEN = len; } } } return LEN; }}
看到这道题的时候,第一反应是先排序,O(nlogn),然后就再查找
显然是不符合题意,题意要求是O(n),所以说排序是不可能符合题意的。只能使用空间换时间的方法
自己一开始想着要修改HashSet的hashCode函数,使得添加到set中就已经是排好序的了,这样就可以实现在O(n)时间内排好序,如此也就节省了时间,后来证明自己想多了,甚至还考虑连续序列的异或和 与非连续序列的异或和的差异(事实是不可区分的),自己过于把事情复杂化了
HashSet的功能是提供存储和查找的功能(不适合访问节点的索引),而在查找方面,HashSet是非常高效的。因此利用它的高效查找性,也就实现了上述算法的简洁性。
所以说,当牵涉到在连续的问题,可以考虑set的高效查找特性!
Runtime: 253 ms
0 0
- Longest Consecutive Sequence
- Longest Consecutive Sequence
- Leetcode : Longest Consecutive Sequence
- [Leetcode] Longest Consecutive Sequence
- longest consecutive elements sequence
- [leetcode] longest consecutive sequence
- Longest Consecutive Sequence
- Longest Consecutive Sequence
- 【leetcode】Longest Consecutive Sequence
- LeetCode - Longest Consecutive Sequence
- [LeetCode]Longest Consecutive Sequence
- leetcode:Longest Consecutive Sequence
- Longest Consecutive Sequence
- Longest Consecutive Sequence
- [Leetcode]Longest Consecutive Sequence
- [leetcode]Longest Consecutive Sequence
- Longest Consecutive Sequence
- Longest Consecutive Sequence
- db2
- iOS学习爬坑记录12:学习Core data简单的CURD
- Swift语言IOS8开发战记9.transfer data without stroyboard
- cocopods 升级和选择安装版本
- iOS Xcode6 AutoLayout跟Size Classes(5)size classes 屏幕旋转的应用
- Longest Consecutive Sequence
- 模块化编程(学习)
- ps筛选特定进程再kill掉的组合命令
- ubuntu14.04交叉编译vlc2.1.5源码,编译出在win32下运行的程序
- IIS默认拒绝PUT和DELETE请求
- usb_modeswitch下载与安装
- SQLServer2008附加2005版本数据库文件报错问题
- 将apk编译到指定目录
- Linux从程序到进程