您现在的位置是:主页 > news > 衡水网站建设服务商/东莞seo建站优化工具

衡水网站建设服务商/东莞seo建站优化工具

admin2025/4/22 0:48:41news

简介衡水网站建设服务商,东莞seo建站优化工具,做pc端网站用什么框架,网站pv uv有什么作用文章目录问题描述解题报告实现代码参考资料问题描述 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)O(n)O(n) 输入:[100,4,200,1,3,2]输入:[100,4,200,1,3,2]输入:[100,4,200,1,3,2] 输出&…

衡水网站建设服务商,东莞seo建站优化工具,做pc端网站用什么框架,网站pv uv有什么作用文章目录问题描述解题报告实现代码参考资料问题描述 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)O(n)O(n) 输入:[100,4,200,1,3,2]输入:[100,4,200,1,3,2]输入:[100,4,200,1,3,2] 输出&…

文章目录

  • 问题描述
  • 解题报告
  • 实现代码
  • 参考资料

问题描述

给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)O(n)O(n)
输入:[100,4,200,1,3,2]输入:[100,4,200,1,3,2][100,4,200,1,3,2]
输出:4输出:44

解题报告

  • 暴力查找
    最粗暴的想法,从每个数字出发,依次查找后面能达到的最长连续序列长度。加上一点优化:判断一个数 x 是否是某个连续序列的开头,首先判断 x-1 是否在数组中
  • 并查集
    将任意相差为1的两个数相连,当将数组遍历完,我们得到若干子树,节点数最大的那棵子树的节点数即为答案。

实现代码

  • 暴力查找
class Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_map<int,int>mp;for(auto num:nums) mp[num]=1;int ans=0;for(int i=0;i<nums.size();i++){if(mp.count(nums[i]-1)) continue;int y=nums[i]+1;while(mp.count(y)){y++;}ans=max(ans,y-nums[i]);}return ans;}
};
  • 并查集
class Solution{public:unordered_map<int,int>fa,cnt;int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}int merge(int x,int y){x=find(x);y=find(y);if(x==y) return cnt[x];fa[y]=x;cnt[x]+=cnt[y];return cnt[x];}int longestConsecutive(vector<int>&nums){if(nums.size()==0){return 0;}for(auto num:nums){fa[num]=num;cnt[num]=1;}int ans=1;for(auto num:nums){if(fa.count(num+1)){ans=max(ans,merge(num,num+1));}}return ans;}
};

参考资料

[1] Leetcode 128.最长连续序列
[2] 每日算法系列【LeetCode 128】最长连续序列