首页 > 其他分享 >leetcode 128 最长连续序列(hash)

leetcode 128 最长连续序列(hash)

时间:2022-12-12 19:34:10浏览次数:71  
标签:cnt hash nums int no ms2 ans 128 leetcode


​128. 最长连续序列​

难度困难437

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)

示例:


输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 ​​[1, 2, 3, 4]。它的长度为 4。​


解题思路:

我们首先走一遍数列,打一个hash,知道有什么数后,我们就遍历数列,然后尝试从这个点左右延伸,延伸的长度范围内的数字我们下次都可以不用走,可以证明这样我们每个数字最多遍历2次。至于延伸的时候我们需要判断数字在不在数列内我们可以用第一次跑的hash的结果。

class Solution {
public:
int longestConsecutive(vector<int>& nums) {
if(nums.size() == 0)return 0;
unordered_set<int> ms1,ms2;
for(auto it:nums)ms1.insert(it);
int ans = 1;
for(int i=0;i<(int)nums.size();i++){
if(ms2.count(nums[i]))continue;
int cnt = 0;
for(int no = nums[i];;no++){
if(!ms1.count(no))break;
cnt++;
ms2.insert(no);
}
int cnt2 = 0;
for(int no=nums[i];;no--){
if(!ms1.count(no))break;
cnt2++;
ms2.insert(no);
}
cnt+=cnt2-1;
ans=max(ans,cnt);
}
return ans;
}
};

 

标签:cnt,hash,nums,int,no,ms2,ans,128,leetcode
From: https://blog.51cto.com/u_15910522/5931542

相关文章

  • leetcode 139. 单词拆分(BFS 或者 DP)
    题目大意:给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定 s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。......
  • leetcode 155. 最小栈(辅助栈)
    题目大意:设计一个支持push,pop,top操作,并能在常数时间内检索到最小元素的栈。push(x)——将元素x推入栈中。pop() ——删除栈顶的元素。top() ——获取栈顶元素......
  • leetcode 128. 最长连续序列 (hash,暴力)
    题目大意:给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。解题思路:我们每次枚举数字的第一个,然后往后数有多少个。可以证明每个数字只会被......
  • #yyds干货盘点# LeetCode程序员面试金典:链表相交
    题目:给你两个单链表的头节点 headA​ 和 headB​ ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目......
  • 集合之Map【HashMap】
    packagecom.Lucky.Map;importjava.util.Iterator;importjava.util.Map;importjava.util.Set;importjava.util.function.BiConsumer;/*HashMap:1.底......
  • 集合之Set【HashSet】
    packagecom.Lucky;importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;importjava.util.function.Consumer;/***Set集合:无序/不可......
  • #yyds干货盘点# LeetCode程序员面试金典:回文链表
    题目:编写一个函数,检查输入的链表是否是回文的。 示例1:输入:1->2输出:false示例2:输入:1->2->2->1输出:true代码实现:classSolution{publicbooleanisPalindrome(L......
  • 力扣 leetcode 22. 括号生成
    问题描述数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。提示:1<=n<=8示例示例1:输入:n=3输出:["((()))","(()())",......
  • 力扣 leetcode 213. 打家劫舍 II
    问题描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋......
  • 力扣 leetcode 62. 不同路径
    问题描述一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为......