题目:
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
Your algorithm should run in O(n) complexity.
链接: http://leetcode.com/problems/longest-consecutive-sequence/
题解:
把数字加入hashset里,然后向左右查找,同时更新max。
Time Complexity - O(n), Space Complexity - O(n)
public 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 max = 0; for(int i = 0; i < nums.length; i++) { if(set.contains(nums[i])) { set.remove(nums[i]); int left = nums[i] - 1, right = nums[i] + 1, localMax = 1; while(set.contains(left)) { set.remove(left); left--; localMax++; } while(set.contains(right)) { set.remove(right); right++; localMax++; } max = Math.max(max, localMax); } } return max; } }
二刷:
Java:
Time Complexity - O(n), Space Complexity - O(n)
public class Solution { public int longestConsecutive(int[] nums) { if (nums == null || nums.length == 0) return 0; Set<Integer> set = new HashSet<>(); for (int num : nums) set.add(num); int max = 0; for (int num : nums) { if (set.contains(num)) { int count = 1; set.remove(num); int i = 1; while (set.contains(num - i)) { set.remove(num - i); i++; count++; } i = 1; while (set.contains(num + i)) { set.remove(num + i); i++; count++; } max = Math.max(max, count); } } return max; } }