leedcode-区间

最大不重叠子集

  • 问题描述:有很多形如 [start, end] 的闭区间,设计一个算法,算出这些区间中最多有几个互不相交的区间
  • 排序:按 end 排序

思想:

  1. 从区间集合中选择一个区间 x,这个 x 是当前所有区间中结束最早的( end 最小
  2. 把所有与 x 区间相交的区间从集合中删除
  3. 重复步骤 1 和 2,直到集合为空
  1. leedcode-435
  • 问题描述: 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠
  • 求得最大不重叠子集,用数组总长度减去即可
  1. leedcode-452
  • 气球射击(与区间调度不同的是区间相邻特殊情况)

区间合并(leedcode-56)

  • 问题描述:给出一个区间的集合,请合并所有重叠的区间
  • 排序:按 start 排序

区间交集(leedcode-986)

  • 问题描述:给定两个由一些闭区间组成的列表,每个区间列表都是成对不相交的,并且已经排序;返回两个区间列表的交集

思想
两种情况:

  • 无交集:A[i][1] < B[j][0] || B[j][1] < A[i][0]
  • 有交集:A[i][1] >= B[j][0] && B[j][1] >= A[i][0]

合并:

  • temp[0] = Math.max(A[i][0], B[j][0]);
  • temp[1] = Math.min(A[i][1], B[j][1]);

指针前进:

  • A[i][1] > B[j][1]:j++
  • A[i][1] < B[j][1]:i++
  • A[i][1] == B[j][1]:i++; j++

你可能感兴趣的:(leedcode)