算法题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); } }
结果:


浙公网安备 33010602011771号