题目描述
给定一个未排序的整数数组 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
代码实现
import java.util.Arrays;
class Solution {public int longestConsecutive(int[] nums) {if(nums.length == 0){return 0;}Set set = new HashSet<>();for (int i = 0; i < nums.length; i++) {set.add(nums[i]);}int n=set.size();Object[] array=set.toArray(new Object[n]);Arrays.sort(array);int max_serise = 1;int temp = 1;for(int i=1;i<array.length;i++){int num1 =Integer.parseInt(array[i].toString());int num2 =Integer.parseInt(array[i-1].toString())+1;if(num1==num2){temp=temp+1;if(temp>max_serise){max_serise=temp;}}else{temp=1;}}return max_serise;}
}
官方思路:
class Solution {public int longestConsecutive(int[] nums) {Set<Integer> num_set = new HashSet<Integer>();for (int num : nums) {num_set.add(num);}int longestStreak = 0;for (int num : num_set) {if (!num_set.contains(num - 1)) {int currentNum = num;int currentStreak = 1;while (num_set.contains(currentNum + 1)) {currentNum += 1;currentStreak += 1;}longestStreak = Math.max(longestStreak, currentStreak);}}return longestStreak;}
}
注意:集合arrayList默认返回Object类,而不是String类 !!!!
incompatible types: Object cannot be converted to String-CSDN博客
查漏补缺:
java中object类对象转换成int对象的两种方法
1.先把object对象转换成String,在用Inetger里的parseInt转成int
Objcet obj;
int a= Integer.parseInt(obj.toString());
2.先把object强转成Long,再转为int
Object obj ;
Long long = (Long) obj;
int a= long.intValue();
其他补充
Java中List,Set,数组的互相转换_java 1.8 list转set-CSDN博客
Java中Arrays.sort()的三种常用用法(自定义排序规则)_arrays.sort自定义排序-CSDN博客