Longest Consecutive Sequence
来源:互联网 发布:虫虫大作战刷气球软件 编辑:程序博客网 时间:2024/06/03 13:45
如果可以使用排序的话就很容易了,但是这无法满足题目的要求,即在O(n)的时间内完成。
那么只好考虑使用hash的情况,首先将所有元素都插入到hash中。然后考察每一个元素,考察时,判断比他小一号的在不在hash里,直到不在为止;然后判断比他大一号的在不在,直到不在为止。这样就可以得到本元素在内的最长连续序列了。
这里有一个小窍门,每当我找到一个在连续序列里的元素的时候,我就把他从hash中删除。为什么可以这样做?这样做为什么不会影响后面的操作呢?设想一种情况,我把某元素删了,但是我在考察后面的元素的时候,这个元素又应该在包含后面那个元素的连续序列里了。这种情况是不可能发生的,所有的连续序列都是一体的,不存在后面又有元素连续序列又包含前面元素的情况,因为后面这个元素已经在第一次被访问到时(如果他在连续序列里)被删掉了。那么我们就可以放心大胆地直接删掉访问到的元素了。
class Solution {public: int longestConsecutive(vector<int> &num) { map<int, int> myHash; for (int i = 0; i < num.size(); ++i) myHash[num[i]] = 1; int maxLen = INT_MIN; map<int, int>::iterator it; for (int i = 0; i < num.size(); ++i) { it = myHash.find(num[i]); if (it == myHash.end()) continue; myHash.erase(num[i]); int asc = 0, dec = 0; int last = num[i]; while (true) { it = myHash.find(last - 1); if (it == myHash.end()) break; else { myHash.erase(last - 1); last -= 1; dec++; } } last = num[i]; while (true) { it = myHash.find(last + 1); if (it == myHash.end()) break; else { myHash.erase(last + 1); last += 1; asc++; } } if (dec + asc + 1 > maxLen) maxLen = dec + asc + 1; } return maxLen; }};
http://oj.leetcode.com/problems/longest-consecutive-sequence/
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
- 【mysql】mysql 常用建表语句
- LeetCode之Merge k Sorted Lists
- ps3手柄与ros
- [LeetCode] [动态规划] [编辑距离] Edit Distance
- UML简单概述
- Longest Consecutive Sequence
- UITableView 删除ROW 程序崩溃
- 21分钟 MySQL 入门教程
- JW Player 使用 RTMP 流
- linux设备驱动归纳总结(三):4.ioctl的实现
- linux特殊权限SUID,SGID和SBIT实例演示
- 享元模式
- [Leetcode] Swap Nodes in Pairs (Java)
- 常用的android弹出对话框