Longest Consecutive Sequence
来源:互联网 发布:淘宝卖家货到付款拒签 编辑:程序博客网 时间:2024/06/06 01:46
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.
看到这个问题肯定会想到先把数组进行排序,但是排序算法的时间复杂度至少是NLog(N),因此不可能进行排序。当时真是一头雾水,觉得没有办法把时间复杂度控制在O(N),后来实在想不通就上网找了些资料,发现可以通过散列表来做。散列表的定义为(Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构。也就是说,它通过把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。后来又看到这篇博客(从头到尾彻底解析Hash 表算法),于是又更加深刻的理解了哈希表算法。采用STL里面的unordered_map成功解决了这个问题。
其中还涉及到auto这个关键字,以前没用过。由于新的C++标准,auto关键字有了一些新的含义。
基于以下两个原因,尽可能使用auto:首先,使用auto会避免重复声明编译器已经知道的类型。其次,当使用未知类型或者类型名称不易理解时使用auto会更加便利。
// C++98 binder2nd< greater<int> > x = bind2nd( greater<int>(), 42 ); // C++11 auto x = [](int i) { return i > 42; };
// C++98 map<int,string>::iterator i = m.begin(); // C++11 auto i = begin(m);
// C++98 for( vector<double>::iterator i = v.begin(); i != v.end(); ++i ) { total += *i; } // C++11 for( auto d : v ) { total += d; }
class Solution {public:int longestConsecutive(const vector<int> &num) {unordered_map<int, bool>visited;int length = 0;int finalLength = 0;for (auto i:num)visited[i] = false;for (auto i : num){if (visited[i])continue;length = 1;for (int j = i + 1; visited.find(j) != visited.end(); ++j){++length;visited[j]=true;}for (int m = i - 1; visited.find(m) != visited.end(); --m){++length;visited[m] = true;}finalLength = max(finalLength,length);}return finalLength;}};
auto关键字介绍参考:http://www.cnblogs.com/hmxp8/archive/2011/11/15/2249309.html
- 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
- Android自定义按钮实现长按功能
- 计算机安全通讯技术
- 透过ISA95看看国外的业务专家才是真正的叫懂业务
- makefile学习经验(2)----静态链接
- Cocos2d-x项目过程中遇到的一些问题总结
- Longest Consecutive Sequence
- npm离线安装?用代理吧!
- 链表逆序的实现方法
- WPF/Silverlight中的RichTextBox总结
- 用PHP表单传递数组
- NYOJ 661 亲亲串
- Maven介绍(创建工程项目以及下载所需要的jar包)
- 动态链接如何确定是调用的哪一个函数
- makefile学习经验(3)---动态链接