128. Longest Consecutive Sequence
128. Longest Consecutive Sequence
Given an unsorted array of integers nums
, return the length of the longest consecutive elements sequence.
You must write an algorithm that runs in O(n)
time.
Example 1:
Input: nums = [100,4,200,1,3,2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
Example 2:
Input: nums = [0,3,7,2,5,8,4,6,0,1]
Output: 9
Constraints:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
My Solutions:
方法1:先排序,再traverse每一个数。Time: O(nlgn)
方法2:把nums的每个数存在hashset里。在traverse hashset的时候,把每个数的+1和-1都找一遍。每次找到一个数,都把Ta从set里删去。Time: O(n)
class Solution {
public int longestConsecutive(int[] nums) {
if (nums == null || nums.length == 0) return 0;
HashSet<Integer> set = new HashSet<>();
for (int i : nums) set.add(i);
int res = 0;
for (int i : nums) {
if (set.contains(i)) {
set.remove(i);
int pre = i - 1;
int next = i + 1;
while (set.contains(pre)) {
set.remove(pre);
pre--;
}
while (set.contains(next)) {
set.remove(next);
next++;
}
res = Math.max(res, next - pre - 1);
}
}
return res;
}
}
Last updated