最长连续序列
题目描述
给定一个未排序的整数数组 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博客