128. Longest Consecutive Sequence
2016-12-09 21:28
351 查看
第一种方法是利用set,然后以每个元素为中心,向两边扩散计算最长的连续子序列。算法复杂度为O(n)
第二种方法是利用hash表,将每个元素逐个插入表中,然后更新表中连续元素的数量,以一个元素为中心,向两边扩张。
class Solution { public: int longestConsecutive(vector<int>& nums) { int res = 0; unordered_set<int> s(nums.begin(), nums.end()); for(int val : nums) { if(!s.count(val)) continue; s.erase(val); int pre = val-1, next = val+1; while(s.count(pre)) s.erase(pre--); while(s.count(next)) s.erase(next++); res = max(res, next-pre-1); } return res; } };
第二种方法是利用hash表,将每个元素逐个插入表中,然后更新表中连续元素的数量,以一个元素为中心,向两边扩张。
class Solution { public: int longestConsecutive(vector<int>& nums) { int res = 0; unordered_map<int, int> m; for(int d : nums) { if(!m.count(d)) { int left = m.count(d-1) ? m[d-1] : 0; int right = m.count(d+1) ? m[d+1] : 0; int sum = left+right+1; m[d] = sum; res = max(res, sum); m[d-left] = sum; m[d+right] = sum; } } return res; } };
相关文章推荐
- Tutorial: 344. Reverse String
- SIGINT、SIGQUIT、 SIGTERM、SIGSTOP区别
- winform刷新UI界面
- 模块化编程-requirejs
- 毛玻璃
- iOS-UI控件-UITableView
- [Arduino] String类型之reserve()函数的作用
- [BZOJ1803]Spoj1487 Query on a tree III(dfs序+主席树)
- bzoj 1803: Spoj1487 Query on a tree III(主席树)
- Errors occurred during the build. Errors running builder 'Integrated External Tool Builder' on proj
- 聚类评估算法-轮廓系数(Silhouette Coefficient )
- AndroidUI入门
- vue.js 开发环境搭建最简单攻略
- poj_2442_Sequence_堆
- UILable文字竖排的方法汇总
- timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' 报错 invalid default value
- 手游斗地主打牌界面的UI实现
- java String-StringBuffer-StringBuilder
- retire or not retire ? is a question.
- Android系统:SystemUi需要注意的一些知识点