Longest Consecutive Sequence
来源:互联网 发布:淘宝免费申请试用技巧 编辑:程序博客网 时间:2024/05/21 09:02
LeetCode第128题,在一个序列中找最长的连续序列。要求在O(n)复杂度下完成。
排序是可以完成的,但是复杂度最低也是O(nlogn),因此考虑hash。
hash可以先把每个数存起来,然后遍历这些数,往两边扩展寻找连续的数,如果找到了就在hash里删除这个数。
这里删除操作是核心,因为如果一个数在这个连续序列当中,那么以这个数为中心扩展,找到的仍然是这个连续序列,因此完全不需要再以这个数为中心查找。这样就是看上去整个方法复杂度是O(n^2),实际上只有O(n)的原因。
python版本
class Solution(object): def longestConsecutive(self, nums): """ :type nums: List[int] :rtype: int """ d = {} res = 0 for num in nums: d[num] = 1 for i in nums: length = 1 j = i-1 while d.has_key(j): del d[j] j -= 1 length += 1 k = i+1 while d.has_key(k): del d[k] k += 1 length += 1 res = max(res, length) return res
c++大神版本
class Solution { public: int longestConsecutive(const vector<int> &nums) { unordered_set<int> my_set; for (auto i : nums) my_set.insert(i); int longest = 0; for (auto i : nums) { int length = 1; for (int j = i - 1; my_set.find(j) != my_set.end(); --j) { my_set.erase(j); ++length; } for (int j = i + 1; my_set.find(j) != my_set.end(); ++j) { my_set.erase(j); ++length; } longest = max(longest, length); } return longest; }};
阅读全文
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
- WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 解决方法
- 爬虫必须学会的正则表达式
- TestNG Annotations示例
- HDU2050
- 怎样处理僵死进程
- Longest Consecutive Sequence
- VS2008编译x265
- 解析XML数据
- NOIP 2010 题解+代码
- Linux下如何进行SFTP用户权限设置
- HSI颜色空间和RGB颜色空间之间的相互转换
- 多线程进阶--Future与Callable
- Html标签
- spring cloud的的服务消费者