给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是[1, 2, 3, 4]。它的长度为 4。
两种方法,一种map,一种set。
map注意除重。
class Solution { public: int longestConsecutive(vector<int>& nums) { int res=0; unordered_set<int>s(nums.begin(),nums.end()); for(int val:nums) { if(!s.count(val)) continue; s.erase(val); int pre=val-1,next=val+1; while(s.count(pre)) s.erase(pre--); while(s.count(next)) s.erase(next++); res=max(res,next-pre-1); } return res; } }; set的方法,用两个指针pre,next分别向两边扫,记录一个next-pre-1的最大值即可 class Solution { public: int longestConsecutive(vector<int>& nums) { int res=0; map<int,int>m; for(int num:nums) { if(m.count(num)) continue; int left=m.count(num-1)?m[num-1]:0; int right=m.count(num+1)?m[num+1]:0; int sum=right+left+1; m[num]=sum; res=max(res,sum); m[num-left]=sum; m[num+right]=sum; } return res; } }; map的方法,分别找当前值得左边和右边极限,两边端点和当前值设置成left+right+1. 如果该值处理过了,就不在处理(set有除重机制)
Leetcode 128. 最长连续序列 DP
最新推荐文章于 2025-03-05 12:16:33 发布