128. Longest Consecutive Sequence
2016-05-07 15:22
411 查看
题目要求找到所有连续的数字的个数 本来想先排序 然后看前面的一个数字是不是等于当前数字-1 然后进行计数 但是排好序后复杂度就是nlogn了
所以想了另外一种方法 扫描每个数a 然后寻找a-1 a-2 …. a+1 a+2….
把比a大的和比a小的相加 就得到了连续的个数 来更新maxlen
但是 有个问题 就是怎么确定a-1在不在数组中 这里使用hash表 这样寻找每个元素的时间就是o(1) 如果 原先数组是{4,3,2,1} 则 每个元素都寻找 和它相连的元素的话复杂度就是n*n了 所以为了避免重复的查找每找到一个相连的元素就把这个元素从hash表中删除
这里使用的是unordered_set unordered_set底层使用hash表来实现的
set 底层是使用红黑树实现的
所以想了另外一种方法 扫描每个数a 然后寻找a-1 a-2 …. a+1 a+2….
把比a大的和比a小的相加 就得到了连续的个数 来更新maxlen
但是 有个问题 就是怎么确定a-1在不在数组中 这里使用hash表 这样寻找每个元素的时间就是o(1) 如果 原先数组是{4,3,2,1} 则 每个元素都寻找 和它相连的元素的话复杂度就是n*n了 所以为了避免重复的查找每找到一个相连的元素就把这个元素从hash表中删除
这里使用的是unordered_set unordered_set底层使用hash表来实现的
set 底层是使用红黑树实现的
using namespace std; class Solution { public: int longestConsecutive(vector<int>& nums) { int maxlen=0; int assendinglen=0; int descendinglen=0; for(int i=0;i<nums.size();i++) { flags.insert(nums[i]); } for(int i=0;i<nums.size();i++) { assendinglen=findNext(nums[i],assending); descendinglen=findNext(nums[i]-1,descending); if(assendinglen+descendinglen>maxlen) maxlen=assendinglen+descendinglen; } return maxlen; } private: enum order{ assending, descending, }; int findNext(int num,order o) { int number=0; while(flags.find(num)!=flags.end()) { number++; flags.erase(num); if(o==assending) num++; else num--; } return number; } unordered_set<int> flags; };
相关文章推荐
- request.getRequestURI(),request.getRequestURL(),request.getQueryString()区别
- 【BZOJ-4435】Juice Junctions 最小割树(分治+最小割)+Hash
- 【iOS】this class is not key value coding-compliant for the key ...
- 【转】PHP中require和include路径问题总结
- UIcontrol中touch事件uicontrolevents的一点东东
- hdoj 3415 Max Sum of Max-K-sub-sequence 【单调队列】
- 第六届山东省ACM竞赛 B题 Lowest Unique Price
- response.sendRedirect()与request.getRequestDispatcher().forward(request,response)
- uva 10534 Wavio Sequence
- Andrioid GUI 系统
- CodeForces 670E Correct Bracket Sequence Editor
- UIview的生命周期
- iOS学习笔记-----UIView的Touch事件
- paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(三段式)
- OSGI Equinox对于H b686 ttp Service实现相关的jar
- String类,StringBuffer类,StringBuilder类
- Poj 1679 The Unique MST【次小生成树】
- iOS UIKit:TabBar Controller
- Windows Sysinternals Suite_2016.05.07
- PHP_$_SERVER中QUERY_STRING,REQUEST_URI的用法