【LeetCode】128. Longest Consecutive Sequence
来源:互联网 发布:网站统计分析系统源码 编辑:程序博客网 时间:2024/06/05 02:46
128. Longest Consecutive Sequence
介绍
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
题意:给定一个无序数组,数组中可能存在重复元素,数组中最长的连续序列长度。
解答
方法一:
这个方法采用了map来帮助完成功能。在遍历过程中,map键值是元素的值,如果此时这个元素是一个序列中的边界,如有序列,1到3,map键值对应的值就是这个序列的长度,即map[1] = 3,且map[3] = 3。
class Solution {public: int longestConsecutive(vector<int>& nums) { unordered_map<int,int> help; int res = 0; for(auto val:nums) { if(help[val]) continue; int left = help[val-1]; int right = help[val+1]; res = max(res,help[val-left] = help[val+right] = help[val] = left+right+1); } return res; }};
方法二
并查集。这个方法时间复杂度和空间复杂度都很高,并不推荐,写在这里只是为了让自己学习并查集这个算法。
class Union_Set{public: Union_Set(int n):mark(n) { for(int i = 0; i < n; ++i) mark[i] = i; } void make_union(int a,int b) { int aroot = find(a); int broot = find(b); mark[aroot] = broot; } int find (int a) { while(a != mark[a]) a = mark[a]; return a; } int max_union() { vector<int> temp(mark.size()); int res = 0; for(int i = 0; i < mark.size(); ++i) { res = max( res,++temp[find(i)] ); } for(auto val:mark) cout << val << " "; cout << endl; return res; }private: vector<int> mark;};class Solution {public: int longestConsecutive(vector<int>& nums) { //并查集方法 unordered_map<int,int> help; Union_Set record(nums.size()); for(int i = 0; i < nums.size(); ++i) { if(help.find(nums[i]) != help.end()) continue; help[nums[i]] = i; if(help.find(nums[i]-1) != help.end()) record.make_union(help[nums[i]-1],i); if(help.find(nums[i]+1) != help.end()) record.make_union(help[nums[i]+1],i); } return record.max_union(); }};
阅读全文
0 0
- [LeetCode]128.Longest Consecutive Sequence
- [Leetcode] 128. Longest Consecutive Sequence
- [leetcode] 128.Longest Consecutive Sequence
- [leetcode] 128.Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- LeetCode 128. Longest Consecutive Sequence
- LeetCode 128. Longest Consecutive Sequence
- [LeetCode]128. Longest Consecutive Sequence
- 【leetcode】128. Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- leetcode.128. Longest Consecutive Sequence
- [leetcode] 128. Longest Consecutive Sequence
- LeetCode-128.Longest Consecutive Sequence
- Leetcode 128. Longest Consecutive Sequence
- [LeetCode] 128. Longest Consecutive Sequence
- LeetCode 128. Longest Consecutive Sequence
- [LeetCode]128. Longest Consecutive Sequence
- SQLite数据库的INTEGER类型
- UVA--- 11183 【有定根的有向图的最小生成树-裸最小树形图】
- HTTP
- 安装Ubuntu 14.10后要做的事(下)—— 开发工具篇
- 定时静音助手
- 【LeetCode】128. Longest Consecutive Sequence
- module.exports 和 exports的区别
- jsp中el表达式的使用(fn标签的使用)
- C++入门知识
- nginx的虚拟主机配置和反向代理,负载均衡
- 安装Ubuntu 14.10后要做的事(上)—— 基础软件篇
- mysql 数据库中varchar的长度与字节,字符串的关系
- inline关键字和宏函数的异同
- HBase之api的基本运用(三)