(数组)2. 合并区间(leedcode.56)(快手)

tech2022-12-20  110

给出一个区间的集合,请合并所有重叠的区间。

示例 1: 输入: intervals = [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2: 输入: intervals = [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

题解思路

先对二维数组按区间左端点大小排序,然后依次入栈 若栈内区间右端点小于当前区间左端点,则两个区间无重叠部分,直接将当前区间入栈 若栈内区间右端点大于当前区间左端点,则说明两区间存在重叠部分,更新栈内区间右端点值,取最大

实现代码

class Solution { public int[][] merge(int[][] intervals) { if(intervals.length == 0){ return new int[0][2]; } Arrays.sort(intervals, new Comparator<int[]>(){ public int compare(int[] o1, int[] o2){ return o1[0] - o2[0]; } }); Deque<int[]> stack = new LinkedList<>(); for(int[] i : intervals){ int[] j = stack.peek(); if(stack.isEmpty() || j[1] < i[0]) { stack.push(i); }else { j[1] = Math.max(j[1], i[1]); } } int[][] res = new int[stack.size()][2]; for(int i = stack.size() - 1; i >= 0; i--) { res[i] = stack.pop(); } return res; } }

leetcode题目链接

56. 合并区间

最新回复(0)