128.最长连续序列
最长时间就是每个元素都作为头遍历一遍取最大长度
set优化,散列存储找符合要求的元素,一次遍历,超时(78/81)代码
class Solution {public int longestConsecutive(int[] nums) {Set<Integer> set = new HashSet<>();int Lmax=0;for(int i=0;i<nums.length;i++){set.add(nums[i]);}//必须先把所有元素存到set中之后再遍历判断for(int i=0;i<nums.length;i++){if(set.contains(nums[i]-1)==false){int curNum=nums[i];int curMax=1;while(set.contains(curNum+1)){curNum+=1;curMax+=1;}Lmax=Math.max(Lmax,curMax);}}return Lmax;}
}
二次优化,只需要遍历set集合即可,nums数组中可能存在多个相同元素而set实现去重
遍历set的方法
1. 使用增强型 for 循环(for-each 循环)
这是最简洁和常用的方法,适用于只需要访问集合元素而不需要修改集合的情况。
import java.util.HashSet;
import java.util.Set;public class Example {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Apple");set.add("Banana");set.add("Cherry");for (String element : set) {System.out.println(element);}}
}
优化代码过了
class Solution {public int longestConsecutive(int[] nums) {Set<Integer> set = new HashSet<>();int Lmax=0;for(int i=0;i<nums.length;i++){set.add(nums[i]);}//必须先把所有元素存到set中之后再遍历判断for(int elem : set){if(set.contains(elem-1)==false){int curNum=elem;int curMax=1;while(set.contains(curNum+1)){curNum+=1;curMax+=1;}Lmax=Math.max(Lmax,curMax);}}return Lmax;}
}