最长连续整数序列的长度

最长连续整数序列的长度

问题

这个题目说的是,给你一个无序的整数数组,你要找到数组中元素能够组成的最长连续整数序列,然后返回它的长度。

比如说,给你的数组是 8, 4, 2, 1, 2, 3, 6,这里面的数字能够组成的最长连续整数序列是 1, 2, 3, 4,因此你要返回它的长度 4。

代码

public class AlgoCasts {

  // Time: O(n*log(n)), Space: O(1)
  public int lengthOfLongestConsecutiveSequenceSorting(int[] nums) {
    if (nums == null || nums.length == 0) return 0;
    Arrays.sort(nums);
    int max = 0, p = 0;

    while (p < nums.length) {
      int len = 1;
      while (p < nums.length-1) {
        if (nums[p+1] - nums[p] > 1) break;
        if (nums[p+1] - nums[p] == 1) ++len;
        ++p;
      }
      max = Math.max(max, len);
      ++p;
    }
    return max;
  }

  // Time: O(n), Space: O(n)
  public int lengthOfLongestConsecutiveSequenceSet(int[] nums) {
    if (nums == null || nums.length == 0) return 0;
    Set<Integer> set = new HashSet<>();
    int max = 0;
    for (int num: nums) set.add(num);

    for (int i = 0; i < nums.length && !set.isEmpty(); ++i) {
      set.remove(nums[i]);
      int low = nums[i], high = nums[i];
      while (set.contains(--low)) set.remove(low);
      while (set.contains(++high)) set.remove(high);
      max = Math.max(max, high - low - 1);
    }
    return max;
  }

}

 上一篇
行列递增的二维数组搜索 行列递增的二维数组搜索
行列递增的二维数组搜索问题 这个题目说的是,给你一个二维数组 matrix,和一个目标值 target。你要在数组里找到这个目标值,然后返回它的行/列下标。如果找不到,则返回 [-1,-1]。 这个数组的每一行都是从左向右递增,每一列都是从
2019-01-06
下一篇 
并查集 并查集
并查集用于解决动态连通性问题,能动态连接两个点,并且判断两个点是否连通。 方法 描述 UF(int N) 构造一个大小为 N 的并查集 void union(int p, int q) 连接 p 和 q 节点 int
2019-01-05
  目录