[leetcode] longest consecutive sequence
来源:互联网 发布:aps c 全画幅 知乎 编辑:程序博客网 时间:2024/04/20 06:13
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.
这题我的第一反应是bitmap,但mapping过去之后,怎么搜这个bitmap又是一个很大的问题。
其实用hash就可以了,首先把数组放在hash表里, O(n)
从表里拿到一个元素之后查找它的前后元素在不在hash表中,找到了把当前元素删除。
每次查找和删除都是O(1),所以hash表的遍历复杂度也是O(n)
顺便贴一下STL里面hash删除的用法
iterator erase ( const_iterator position );
size_type erase ( const key_type& k );
iterator erase ( const_iterator first, const_iterator last );Versions (1) (3) 返回被删除元素的下一个元素的iterator
Version (2) 返回被删除的元素个数
class Solution {public: int longestConsecutive(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function unordered_set<int> hash; for(int i = 0; i < num.size(); i++){ hash.insert(num[i]); } int ret = 0; int cnt; unordered_set<int>::iterator it; int cur_elem; int tmp_elem; while(!hash.empty()){ it = hash.begin(); cur_elem = *it; hash.erase(it); tmp_elem = cur_elem; cnt = 1; while((it = hash.find(tmp_elem + 1))!= hash.end()){ hash.erase(it); tmp_elem++; cnt++; } tmp_elem = cur_elem; while((it = hash.find(tmp_elem - 1))!= hash.end()){ hash.erase(it); tmp_elem--; cnt++; } ret = max(ret, cnt); } return ret; }};
- Leetcode : Longest Consecutive Sequence
- [Leetcode] Longest Consecutive Sequence
- [leetcode] longest consecutive sequence
- 【leetcode】Longest Consecutive Sequence
- LeetCode - Longest Consecutive Sequence
- [LeetCode]Longest Consecutive Sequence
- leetcode:Longest Consecutive Sequence
- [Leetcode]Longest Consecutive Sequence
- [leetcode]Longest Consecutive Sequence
- leetcode Longest Consecutive Sequence
- Leetcode: Longest Consecutive Sequence
- LeetCode:Longest Consecutive Sequence
- [leetcode] Longest Consecutive Sequence
- LeetCode-Longest Consecutive Sequence
- LeetCode - Longest Consecutive Sequence
- [LeetCode] longest consecutive sequence
- LeetCode | Longest Consecutive Sequence
- [leetcode]Longest Consecutive Sequence
- 程序员眼睛太疼,eclipse换个样式
- iOS开发8:使用Tool Bar切换视图
- Java 集合框架
- 0.7在计算机中的存储问题
- jQuery中 index() 方法的使用
- [leetcode] longest consecutive sequence
- 黑马程序员 银行业务调度系统
- android layout_weight相关
- 禁用驱动数字签名验证
- linux中select()函数分析
- 汇编指令
- hadoop中的若干异常的解决办法
- Unix环境高级编程 写dup2功能相同的函数
- wxWidgets事件处理(手机播放器连载系列2)