Longest Consecutive Sequence
来源:互联网 发布:涂鸦移动 王晔 知乎 编辑:程序博客网 时间:2024/06/09 17:47
题目要求提供O(n)时间复杂度的解法,因此可以可以排除使用普通的排序来解决此题。 在leetcode的论坛里看到了两个比较主流的方法。
一是使用hash map,第一轮遍历把所有元素以(int k , 0)加入hash map,key 是元素,value是0。第二轮遍历,从第一个元素开始,分别往前和往后查找连续元素的边界,遇到连续元素后,在counter中加一,随后把该元素相对应的value改写成1。因此遍历时就会跳过已经出现在其他连续序列之中的数,总体的时间复杂度为O(n)。
二是用普通map,第一轮遍历将map(num[i])set为1,因此在O(n)时间之内完成了排序,接下来按照这个map数出连续序列的边界。这个方法相对来说空间消耗会比第一种方法大,虽然量级相同。
我使用了第一种方法,不过使用的是hash set,当元素出现在连续序列中时,从set中删除该元素,使用的是第一种方法,但是在操作中会简化一点点,时间和空间上没有改进。
public class Solution { public int longestConsecutive(int[] num) { int maxLen = 0; if (num == null || num.length == 0) { return maxLen; } HashSet<Integer> set = new HashSet<Integer>(); for (int i = 0; i < num.length; i++) { set.add(num[i]); } for (int i = 0; i < num.length; i++) { int k = num[i]; int len = 1; if (set.contains(k)) { while (set.contains(k - 1)) { len++; set.remove(k - 1); k = k - 1; } k = num[i]; while (set.contains(k + 1)) { len++; set.remove(k + 1); k = k + 1; } maxLen = Math.max(len, maxLen); } } return maxLen; }}
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
- bibtex使用教程
- vim使用 tip3
- 黑马程序员-Java正则表达式
- jstack命令详解
- 第一章总结
- Longest Consecutive Sequence
- 推荐一款比较好的整站抓取工具
- 机器视觉学习搜集的好网址
- 仅用aspx文件实现Ajax调用后台cs程序。(实例)
- Spring Shiro配置实现用户认证和授权
- C++链式队列
- js二级下拉菜单
- Android 基于Netty的消息推送方案之概念和工作原理(二)
- 水仙花 问题