列出所有区间 字节问题

    技术2025-09-28  16

    插一个之前字节问的列出所有的区间:

    例:输入:[[1,3],[2,6],[8,10],[15,18]] 输出: [8, 10] [15, 18] [1, 2] [2, 3] [3, 6]

    solution

    自己想的,建立优先队列,存有重复的,这样最小堆就可以往出取时建立区间,存入list中,没有重合的就直接存入list中。

    public class merge56byteDance { public static void main(String[] args) { int[][] nums = {{1, 3}, {2, 6}, {8, 10}, {15, 18}}; int[][] res = merge(nums); System.out.println(Arrays.deepToString(res)); } private static int[][] merge(int[][] nums) { if (nums == null || nums.length == 0 || nums[0].length == 0) return new int[0][0]; Arrays.sort(nums, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[0] - o1[0]; } }); PriorityQueue<Integer> queue = new PriorityQueue<>(); int list0 = nums[0][0]; int list1 = nums[0][1]; List<int[]> list = new ArrayList<>(); queue.add(list0); queue.add(list1); for (int i = 1; i < nums.length; i++) { int[] curNum = nums[i]; if (curNum[0] < list1) { queue.add(curNum[0]); queue.add(curNum[1]); list0 = curNum[0]; list1 = curNum[1]; } else{ list.add(curNum); } } int p1 = queue.poll(); while(!queue.isEmpty()){ int p2 = queue.poll(); list.add(new int[]{p1,p2}); p1 = p2; } return list.toArray(new int[list.size()-1][2]); } }
    Processed: 0.402, SQL: 9