欢迎光临
我们一直在努力

破解最长连续序列:LeetCode128高效解法

题目LeetCode128

        给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

        请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例

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

Python解法

代码示例(哈希表)

from typing import List

class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
# 1. 把数组转成集合,去重+快速查找
s = set(nums)
# 2. 记录最长连续序列的长度
max_len = 0
# 3. 遍历集合中每一个数字
for x in s:
# 4. 核心判断:如果当前数字的前一个数不在集合中 → 它是连续序列的起点
if x – 1 not in s:
cur = x # 当前遍历的起点数字
cnt = 0 # 统计当前连续序列的长度
# 5. 向后遍历,统计连续数字的个数
while cur in s:
cur += 1
cnt += 1
# 6. 更新最长长度
max_len = max(max_len, cnt)
return max_len

过程演示

用示例数据 [100,4,200,1,3,2] 的执行步骤图

核心逻辑

Java解法

代码示例(哈希表)

class Solution{
public int longestConsecutive(int[] nums){
Set<Integer> set = new HashSet<>();
for(int num: nums){
set.add(num);
}
int max_len = 0;
for(int x: set){
if(!set.contains(x – 1)){
int cur = x;
int cnt = 0;
while(set.contains(cur)){
cur += 1;
cnt += 1;
}
max_len = Math.max(max_len, cnt);
}
}
return max_len;
}
}

C++解法

代码示例(哈希表)

class Solution{
public:
int longestConsecutive(vector<int>& nums){
unordered_set<int> st(nums.begin(), nums.end());
int max_len = 0;
for(int x: st){
if (st.find(x – 1) == st.end()) {
int cur = x;
int cnt = 0;
while (st.count(cur)) {
cur++;
cnt++;
}
ma_len = max(max_len, cnt);
}
}
return max_len;
}
};

赞(0)
未经允许不得转载:171主机测评 » 破解最长连续序列:LeetCode128高效解法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址