目录
- 题目
- 1- 思路
- 2- 实现
- ⭐56. 合并区间——题解思路
- 3- ACM 实现
题目
- 原题连接:56. 合并区间
1- 思路
模式识别:合并区间 ——> 数组先排序
思路
- 1.先对数组内容进行排序 ——> 定义 left、right 根据排序后的结果,更新 right
- 2.遍历 通过 i = 1 判断 i-1 的方式 ——>
[i-1][1] >= [i][0]
——> 此时更新 right
2- 实现
⭐56. 合并区间——题解思路
class Solution {public int[][] merge(int[][] intervals) {// 1.排序Arrays.sort(intervals,(o1,o2) -> Integer.compare(o1[1],o2[1]));List<int []> res = new ArrayList<>();// 2.判断逻辑int left = intervals[0][0];int right = intervals[0][1];for(int i = 1 ; i < intervals.length ;i++){if(intervals[i][0] > right){res.add(new int[]{left,right});left = intervals[i][0];right = intervals[i][1];}else{right = Math.max(right,intervals[i][1]);}}res.add(new int[]{left,right});return res.toArray(new int[res.size()][]);}
}
3- ACM 实现
public class mergeIntervals {public static int[][] mergeIntervals(int[][] intervals){List<int[]> res = new ArrayList<>();Arrays.sort(intervals,((o1, o2) -> Integer.compare(o1[0], o2[0])));// 遍历int left = intervals[0][0];int right = intervals[0][1];for(int i = 1 ; i < intervals.length;i++){if(intervals[i][0] > right){res.add(new int[]{left,right});left = intervals[i][0];right = intervals[i][1];}else{right = Math.max(right,intervals[i][1]);}}res.add(new int[]{left,right});return res.toArray(new int[res.size()][]);}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入数组长度");int n = sc.nextInt();int[][] intervals = new int[n][2];for(int i = 0 ; i < n ; i++){intervals[i][0] = sc.nextInt();intervals[i][1] = sc.nextInt();}int[][] forRes = mergeIntervals(intervals);System.out.println("合并后的区间为");for (int[] i:forRes){System.out.print(Arrays.toString(i)+" ");}}
}