Leetcode 最长连续序列

题目链接:https://leetcode-cn.com/problems/longest-consecutive-sequence/

题目大意:

  略。

分析:

  注意有重复值,序列为空等情况。

代码如下:

 1 class Solution {
 2 public:
 3     int longestConsecutive(vector<int>& nums) {
 4         unordered_map< int, int > m1; // 存以 key 为首的最长连续序列的长度
 5         unordered_map< int, int > m2; // 存以 key 为尾的最长连续序列的长度
 6         unordered_set< int > vis; // 检查数是否出现过
 7         int ans = 0;
 8
 9         for(int i = 0; i < nums.size(); ++i) {
10             if(vis.find(nums[i]) != vis.end()) continue;
11             vis.insert(nums[i]);
12
13             m1[nums[i]] = m2[nums[i]] = 1;
14
15             if(m2.find(nums[i] - 1) != m2.end()) { // 查一下是否存在以nums[i] - 1结尾的序列
16                 splice(nums[i] - 1, nums[i], m2, m1); // 拼接
17             }
18             if(m1.find(nums[i] + 1) != m1.end()) { // 查一下是否存在以nums[i] + 1开头的序列
19                 splice(nums[i], nums[i] + 1, m2, m1); // 拼接
20             }
21         }
22
23         for(auto &x : m1) ans = max(ans, x.second);
24
25         return ans;
26     }
27
28     // 拼接以B结尾的序列和以A开头的序列
29     inline void splice(int B, int A, unordered_map< int, int > &mB, unordered_map< int, int > &mA) {
30         mB[A + mA[A] - 1] = mA[B - mB[B] + 1] = mB[B] + mA[A];
31         mA.erase(A);
32         mB.erase(B);
33     }
34 };

原文地址:https://www.cnblogs.com/zaq19970105/p/11408556.html

时间: 2024-10-31 18:28:09

Leetcode 最长连续序列的相关文章

[LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

Given a binary tree, find the length of the longest consecutive sequence path. The path refers to any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The longest consecutive path need to be from p

图解leetcode —— 128. 最长连续序列

前言: 每道题附带动态示意图,提供java.python两种语言答案,力求提供leetcode最优解. 描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 思路: 首先,我们先来看一个简单的例子:序列123 序列 56,插入4,求连续序列长度. 很容易得出结论,答案是6,那么这个6是怎么来的呢?6 = len(1,2

[LeetCode] Longest Consecutive Sequence 求最长连续序列

Given an unsorted array of integers, find the length of the longest consecutive elements sequence. For example, Given [100, 4, 200, 1, 3, 2], The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4. Your algorithm should run i

LeetCode 128. 最长连续序列(Longest Consecutive Sequence)

题目描述 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 解题思路 利用并查集的思想,构造一个map记录数组中以每个数所在的最长连续序列长度.每次遍历到一个数时,首先检查map中是否存在该数,若存在直接跳过,否则作如下更新操作: 找到左右相邻数字是否在map中,若存在则分别记录他们所在的最长连续序列长度,并更新当前的

【LeetCode】128. 最长连续序列

题目 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为O(n). 示例: 输入:[100, 4, 200, 1, 3, 2] 输出:4 解释:最长连续序列是[1, 2, 3, 4].它的长度为4 思路 思路一 先由小到大进行排序 考虑三种情况: 前后相差1,则是连续序列 前后相等,循环continue 最后一个元素,break 代码 def longestConsecutive(nums) -> int: ????if nums: ????????nums.sort()

[LeetCode] 128. 最长连续序列

题目链接 : https://leetcode-cn.com/problems/longest-consecutive-sequence/ 题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 思路: 这道题, 难在时间复杂度限定在\(O(n)\), 要不排序就可以了! 思路一:集合 集合,查询时间复杂度为\(

GEEK编程练习— —最长连续序列

题目 给定一个无序的整数数组,返回最长连续序列的长度.要求时间复杂度为O(n). 输入 [100, 4, 200, 1, 3, 2, 0, -1] 输出 6 分析 因为要求时间负责度为O(n),所以不能先排序再查找.所以想到查询最快的hash表,记录每个元素是否使用,对每个元素,往左右扩张,直到不连续为止. 代码 #include <iostream> #include <unordered_map> #include <algorithm> using namespa

128. 最长连续序列

给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. class Solution(object): def longestConsecutive(self, num): """ :type nums: List[int] :rtype: int """ if num is

LeetCode--128--最长连续序列(python)

给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 暴力超时... class Solution: def longestConsecutive(self, nums: List[int]) -> int: longestSequence = 0 for num in nums: curNum = num streak =