当前位置:网站首页>leetcode-128: longest continuous sequence
leetcode-128: longest continuous sequence
2022-07-31 01:44:00 【chrysanthemum bat】
题目
题目连接
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度.
请你设计并实现时间复杂度为 O(n) 的算法解决此问题.
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4].它的长度为 4.
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
解题
方法一:哈希表
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> set;
for(int num:nums) set.insert(num);//去重
int res=0;
for(int num:set){
if(!set.count(num-1)){
//To find the starting position of a contiguous sequence
int cur_num=num;
int cur_count=1;
while(set.count(cur_num+1)){
cur_num++;
cur_count++;
}
res=max(res,cur_count);
}
}
return res;
}
};
方法二:并查集
class UnionFind{
private:
vector<int> parent;
vector<int> size;
public:
UnionFind(int n){
parent.resize(n);
size.resize(n);
for(int i=0;i<n;i++){
parent[i]=i;
size[i]=1;
}
}
int find(int index){
if(parent[index]==index) return index;
return parent[index]=find(parent[index]);
}
void unite(int index1,int index2){
int p1=find(index1);
int p2=find(index2);
if(p1!=p2){
parent[p1]=p2;
size[p2]+=size[p1];
}
}
int getMaxConn(){
int res=0;
for(int i=0;i<size.size();i++){
res=max(res,size[i]);
}
return res;
}
};
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int n=nums.size();
UnionFind uf(n);
unordered_map<int,int> mp;
for(int i=0;i<n;i++){
if(mp.count(nums[i])) continue;
if(mp.count(nums[i]-1)){
uf.unite(i,mp[nums[i]-1]);
}
if(mp.count(nums[i]+1)){
uf.unite(i,mp[nums[i]+1]);
}
mp[nums[i]]=i;
}
return uf.getMaxConn();
}
};
边栏推荐
- 力扣每日一题-第46天-704. 二分查找
- pycharm重命名后无法运行(报错: can‘t open file......No such file or directory)
- GCC Rust is approved to be included in the mainline code base, or will meet you in GCC 13
- 内网渗透——提权
- Jiuzhou Cloud was selected into the "Trusted Cloud's Latest Evaluation System and the List of Enterprises Passing the Evaluation in 2022"
- 爬虫文本数据清洗
- Xiaohei's leetcode journey: 104. The maximum depth of a binary tree
- 蛮力法/邻接矩阵 广度优先 有向带权图 无向带权图
- 1782. Count the number of point pairs Double pointer
- MySql的安装配置超详细教程与简单的建库建表方法
猜你喜欢
Kyushu cloud as cloud computing standardization excellent member unit
软件测试工作3年了,谈谈我是如何从刚入门进阶到自动化测试的?
Basic Parameters of RF Devices 1
tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现
华为od 转骰子 js
两个有序数组间相加和的Topk问题
Parameter introduction and selection points of wireless module
《实战》基于情感词典的文本情感分析与LDA主题分析
uniapp使用第三方字体
【flask入门系列】Flask-SQLAlchemy的使用
随机推荐
数字图像隐写术之JPEG 隐写分析
MySql的初识感悟,以及sql语句中的DDL和DML和DQL的基本语法
验证 XML 文档
VS warning LNK4099: No solution found for PDB
斩获BAT、TMD技术专家Offer,我都经历了什么?
Interprocess communication study notes
使用PageHelper实现分页查询(详细)
MySQL (6)
kotlin中函数作为参数和函数作为返回值实例练习
MySQL installation tutorial (detailed, package teaching package~)
pycharm cannot run after renaming (error: can't open file...No such file or directory)
蛮力法/邻接矩阵 广度优先 有向带权图 无向带权图
[WeChat applet] This article takes you to understand data binding, event binding, event parameter transfer, and data synchronization
手把手教你配置Jenkins自动化邮件通知
12张图带你彻底搞懂服务限流、熔断、降级、雪崩
leetcode-1161:最大层内元素和
leetcode-952:按公因数计算最大组件大小
android的webview缓存相关知识收集
一个无经验的大学毕业生,可以转行做软件测试吗?我的真实案例
rpm安装postgresql12