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

leetcode 128. 最长连续序列 (hash,暴力)

时间:2022-12-12 19:32:13浏览次数:36  
标签:hash nums int ms ans 128 leetcode dp size


题目大意:

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

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

解题思路:

我们每次枚举数字的第一个,然后往后数有多少个。可以证明每个数字只会被枚举一次。注意,中间用hash。

class Solution {
public:
unordered_set<int> ms;
int longestConsecutive(vector<int>& nums) {
int ans = 0;
for(auto it:nums)ms.insert(it);
for(auto it:ms){
if(!ms.count(it-1)){
int no = it;
int len = 1;
while(ms.count(no))no++,len++;
ans = max(ans,len-1);
}
}
return ans;
}
};

第二种方法是排序+递推

class Solution {
public:

int longestConsecutive(vector<int>& nums) {
if(nums.size() == 0)return 0;
int ans = 1;

sort(nums.begin(),nums.end());
vector<int> dp(nums.size(),0);
dp[0] = 1;
int n = nums.size();
for(int i =1;i<n;i++){
if(nums[i] == nums[i-1]+1)dp[i] = dp[i-1]+1;
else if(nums[i] == nums[i-1])dp[i] = dp[i-1];
else dp[i] = 1;
ans = max(ans,dp[i]);
}
return ans;
}
};

 

标签:hash,nums,int,ms,ans,128,leetcode,dp,size
From: https://blog.51cto.com/u_15910522/5931553

相关文章

  • #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”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为......
  • 【Java】【LeetCode】字符串操作
    将空格替换成"%20"Stringa=s.replace("","%20");//注意replace不是直接在s上做修改,而是返回了一个字符串StringBuilderStringBuildersb=newStringBuilder("1234a......
  • 【03期】如何决定使用 HashMap 还是 TreeMap?
    问:如何决定使用HashMap还是TreeMap?TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结......
  • #yyds干货盘点# LeetCode程序员面试金典:链表求和
    题目:给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。 示例:输入:(7->1->......