第一题,合并区间,然后对合并后的结果进行判断 func main() { var n, m int for { flag, _ := fmt.Scanln(&n, &m) if flag == 0 { break } arr := make([][]int, n) for i := 0; i < n; i++ { arr[i] = make([]int, 2) fmt.Scanln(&arr[i][0], &arr[i][1]) } sort.Slice(arr, func(i, j int) bool { return arr[i][0] < arr[j][0] }) res := make([][]int, 0) count := make([]int, n) res = append(res, arr[0]) count[0] = 1 for i := 1; i < n; i++ { if arr[i][0] <= res[len(res)-1][1] { res[len(res)-1][1] = min(res[len(res)-1][1], arr[i][1]) res[len(res)-1][0] = arr[i][0] count[len(res)-1]++ } else { res = append(res, arr[i]) count[len(res)-1]++ } } if len(res) == 1 { if res[0][1]-res[0][0]+1 >= m { fmt.Println(n) } else { fmt.Println(n - 1) } } else if len(res) == 2 && res[0][0] == 1 && res[1][1] == m && res[0][1] + 1 == res[1][0] { fmt.Println(n) } else { sort.Ints(count) fmt.Println(count[n-1]) } } }