改进 使用set的唯一性 首先先把所有num值放入HashSet,然后遍历整个数组,如果HashSet中存在该值,就先向下找到边界,找的同时把找到的值一个一个从set中删去,然后再向上找边界,同样要把找到的值都从set中删掉。所以每个元素最多会被遍历两边,时间复杂度为O(n)。
/**128. Longest Consecutive Sequence * @param nums * @return 数组里连续数字的长度 */ public int longestConsecutive(int[] nums) { if (nums.length <= 1) return nums.length; Set<Integer> set = new HashSet<Integer>(); for (int num: nums) { set.add(num); } int max = 0; for (int num: nums) { int len = 0; if (set.contains(num)) { len++; set.remove(num); for (int n=num+1; set.contains(n); n++) { len++; set.remove(n); } for (int n=num-1; set.contains(n); n--) { len++; set.remove(n); } max = (len>max)? len: max; } } return max; }