这道题的主要是时间复杂度,因为需要O(n)的时间复杂度,所以就不能使用排序首先针对这种问题,要先使用hashset去重,然后找到开始数字,就是set中没有这个数字-1的数字,这种数字才有可能成为一个连续序列的起始点然后就是使用while循环,直到set中没有累加的数字class Solution { public int longestConsecutive(int[] nums) { //先去重 SetInteger num_set new HashSetInteger(); //填入set for(int num : nums){ num_set.add(num); } int ans 0; for (int num : num_set){ //如果set中的一个数不存在他的前一个数,那么设为1 if (!num_set.contains(num-1)){ //更新现在的开始num为num int currentNum num; int currentStreak 1; //从当前这个数开始,依次往下加一,看看最长ans while(num_set.contains(currentNum1)){ currentStreak 1; currentNum 1; } ans Math.max(currentStreak,ans); } } return ans; } }