ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LeetCode 热题100 No.3——最长连续序列

LeetCode 热题100 No.3——最长连续序列 题目描述128. 最长连续序列 - 力扣LeetCode解题思路这道题看到第一眼想法是用sort排序后直接遍历找最长序列可惜sort排序时间复杂度为O(nlogn)并不符合题目O(n)的要求。之后考虑用到哈希表把所有数字存入哈希集合实现 O (1) 查找之后的这个思路很关键就是想到只从连续序列的起点开始统计长度。判断条件是集合中不存在当前数字-1说明是序列开头再循环向后查找连续数字统计序列长度更新全局最大值。每个元素只会被访问一次整体时间复杂度就是O (n)。代码如下class Solution { public: int longestConsecutive(vectorint nums) { unordered_setint ust; // 全部放入哈希集合O(n) for(auto it: nums) { ust.insert(it); } int ans0; // 遍历集合 for(auto it ust.begin();it ! ust.end();it) { // *it-1不在集合说明当前元素是一段连续序列的起点 if(!ust.count(*it-1)) { int cnt1; int tar*it1; // 不断往后找连续数字 while(ust.count(tar)) { cnt; tartar1; } ansmax(ans,cnt); } } return ans; } };时间复杂度O(n)每个元素最多进入 while 循环一次空间复杂度O(n)哈希集合存储全部数字值得注意的是不要直接遍历原数组nums有大量重复数字遍历unordered_set自动去重减少循环次数。
返回列表