自定义排序区间,求解《252. 会议室》

例题

252. 会议室

给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。

示例 1:
输入:intervals = [[0,30],[5,10],[15,20]]
输出:false
示例 2:
输入:intervals = [[7,10],[2,4]]
输出:true

答案

自定义排序

var canAttendMeetings = function(intervals) {
  intervals.sort((a, b) => a[0] - b[0])
  let n = intervals.length
  for (let i = 1; i < n; i++) {
    if (intervals[i][0] < intervals[i - 1][1]) return false
  }
  return true
};
func canAttendMeetings(intervals [][]int) bool {
  sort.SliceStable(intervals, func(i, j int) bool {
    return intervals[i][0] < intervals[j][0]
  })
  n := len(intervals)
  for i := 1; i < n; i++ {
    if intervals[i][0] < intervals[i - 1][1] {
      return false
    }
  }
  return true
}
class Solution {
  function canAttendMeetings($intervals) {
    usort($intervals, fn($a, $b) => $a[0] > $b[0]);
    $n = count($intervals);
    for ($i = 1; $i < $n; $i++) {
      if ($intervals[$i][0] < $intervals[$i - 1][1]) return false;
    }
    return true;
  }
}
class Solution {
  public boolean canAttendMeetings(int[][] intervals) {
    Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
    int n = intervals.length;
    for (int i = 1; i < n; i++) {
      if (intervals[i][0] < intervals[i - 1][1]) return false;
    }
    return true;
  }
}
public class Solution {
  public bool CanAttendMeetings(int[][] intervals) {
    Array.Sort(intervals, (a, b) => a[0] - b[0]);
    int n = intervals.Length;
    for (int i = 1; i < n; i++) {
      if (intervals[i][0] < intervals[i - 1][1]) return false;
    }
    return true;
  }
}
static inline int cmp(const void *pa, const void *pb) {
  int *a = *(int**) pa, *b = *(int**) pb;
  return a[0] - b[0];
}
bool canAttendMeetings(int** intervals, int intervalsSize, int* intervalsColSize){
  qsort(intervals, intervalsSize, sizeof(int) * 2, cmp);
  for (int i = 1; i < intervalsSize; i++) {
    if (intervals[i][0] < intervals[i - 1][1]) return false;
  }
  return true;
}
class Solution {
public:
  bool canAttendMeetings(vector<vector<int>>& intervals) {
    sort(intervals.begin(), intervals.end(), [&intervals](const vector<int> &a, const vector<int> &b) {
      return a[0] < b[0];
    });
    int n = intervals.size();
    for (int i = 1; i < n; i++) {
      if (intervals[i][0] < intervals[i - 1][1]) return false;
    }
    return true;
  }
};
class Solution:
  def canAttendMeetings(self, intervals: List[List[int]]) -> bool:
    intervals.sort(key = lambda interval: interval[0])
    n = len(intervals)
    for i in range(1, n):
      if intervals[i][0] < intervals[i - 1][1]: return False
    return True

定长列表存储索引,自定义排序,双指针求解《870. 优势洗牌》
定长列表存储索引,自定义排序,双指针求解《870. 优势洗牌》
计数排序(API / 哈希映射 / 定长列表实现)+ 自定义排序,3 解法求解《1636. 按照频率将数组升序排序》
计数排序(API / 哈希映射 / 定长列表实现)+ 自定义排序,3 解法求解《1636. 按照频率将数组升序排序》
扫描线 + 离散化 + 排序哈希集合(升序),求解《850. 矩形面积 II》
扫描线 + 离散化 + 排序哈希集合(升序),求解《850. 矩形面积 II》