leetcode-56合并区间 | 青训营

38 阅读1分钟

image.png

解析

  • java中进行排序的两种写法
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] interval1, int[] interval2) {
                return interval1[0] - interval2[0];
            }
        });
        //lamda表达式
        Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);
  • 前后对比法
        for (int i = 0; i < intervals.length; i++) {
            int l = intervals[i][0];
            int r = intervals[i][1];
            int j = i + 1;
            if (res.size() == 0 || res.get(res.size() - 1)[1] < l) {
                res.add(intervals[i]);
            } else {
                res.get(res.size() - 1)[1] = Math.max(res.get(res.size() - 1)[1], intervals[i][1]);
            }
        }
  • 指针法
for (int i = 0; i < intervals.length; ) {
            j = i + 1;
            res.add(intervals[i]);
            while (j < intervals.length && intervals[j][0] <= intervals[i][1]) {
                res.get(res.size() - 1)[1] = Math.max(res.get(res.size() - 1)[1], intervals[j][1]);
                j++;
            }
            i = j;
        }

完整代码

  • 解法一
class Solution {
    public int[][] merge(int[][] intervals) {
        //解法一
        if (intervals.length == 0) {
            return new int[0][2];
        }
        Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] interval1, int[] interval2) {
                return interval1[0] - interval2[0];
            }
        });
        ArrayList<int[]> res = new ArrayList<>();
        for (int i = 0; i < intervals.length; i++) {
            int l = intervals[i][0];
            int r = intervals[i][1];
            int j = i + 1;
            if (res.size() == 0 || res.get(res.size() - 1)[1] < l) {
                res.add(intervals[i]);
            } else {
                res.get(res.size() - 1)[1] = Math.max(res.get(res.size() - 1)[1], intervals[i][1]);
            }
        }
        return res.toArray(new int[0][]);
    }
}
  • 解法二
class Solution {
    public int[][] merge(int[][] intervals) {
        //解法二
        if (intervals.length == 0) {
            return new int[0][2];
        }
        Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);
        ArrayList<int[]> res = new ArrayList<>();
        int j = 0;
        for (int i = 0; i < intervals.length; ) {
            j = i + 1;
            res.add(intervals[i]);
            while (j < intervals.length && intervals[j][0] <= intervals[i][1]) {
                res.get(res.size() - 1)[1] = Math.max(res.get(res.size() - 1)[1], intervals[j][1]);
                j++;
            }
            i = j;
        }
        return res.toArray(new int[0][]);
    }
}