題解一:
? ? ? ? 哈希表:找連續最長的數字序列,很容易聯想到排序,但排序的時間復雜度O(nlogN)過大,判題容易超時。因此我們需要使用哈希表來快速查找,序列中是否存在與某個數相鄰的數。用HashSet建立哈希表并去重,為了降低同一連續序列中重復查找的次數,我們先判斷一個數字是否是連續序列的第一個值,如果是則循環搜索之后連續的值,如果不是則跳過。同時維護一個最長序列長度并返回。
import java.util.HashSet;
import java.util.Set;class Solution {public int longestConsecutive(int[] nums) {Set<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}int longest = 0;int temp = 0;for (int num : nums) {if (!set.contains(num - 1)) {while (set.contains(num)) {temp += 1;num++;}}if (temp > longest) longest = temp;temp = 0;}return longest;}
}