算法题3:最长连续序列

题目描述:

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

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

 

示例 1:

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

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
示例 3:

输入:nums = [1,0,1,2]
输出:3

思路:相比官方解题思路用哈希表,我觉得我自己的思路可能更简单一些,就是直接用排序并去重的思路

1、先把nums去重并排序

2、遍历一遍所有的数,中间变量从1开始如果后面的数加1与当前数相同则中间变量结果加1,如果出现不相等的则中间变量再从1开始以相同逻辑计算

最终取到中间变量最大的数就是结果了

python代码:

class Solution:
    def longestConsecutive(self, nums):
        if nums ==[]:
            return 0
        sorted_data = list(sorted(set(nums)))
        if len(sorted_data) == 1:
            return 1
        print(sorted_data)
        temp_list = [1]
        num = 1
        for i in range(len(sorted_data) -1 ):
            if sorted_data[i +1] == sorted_data[i] + 1:
                temp_list.append(num + 1)
                num += 1
            else:
                num = 1

        return max(temp_list)

结果:

 

 

java代码:

class Solution {
    public int longestConsecutive(int[] nums) {
        if (nums.length == 0) return 0;
        Arrays.sort(nums);
        int result_num = 0; //结果 
        int tmp_num = 1; // 临时变量
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i-1]){
                continue; //相同元素跳过
            } else if (nums[i] == nums[i-1] +1 ) { // 连续
                tmp_num ++;
            } else { // 出现中断,则从头计算,同时记录最大次数
                result_num = Math.max(result_num, tmp_num);
                tmp_num = 1;
            }
        } 
        return Math.max(result_num, tmp_num);
    }
}

结果:

 

posted @ 2025-04-20 10:34  夏晓旭  阅读(32)  评论(0)    收藏  举报