Leetcode--56. 合并区间
給出一個區間的集合,請合并所有重疊的區間。
示例 1:
輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].
示例?2:
輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。
思路:先給每行數按照第一個數字排序
之后遍歷,如果nums[i][0]<=nums[i+1][0]&&nums[i][1]>=nums[i+1][1],說明兩個數組可以合并,否則把nums[i][0],nums[i][1]加入要輸出的區間,之后把i+1設為新的標志,開始比較
提交的代碼:
class?Solution?{
????public?int[][]?merge(int[][]?intervals)?{
????????if?(intervals?==?null?||?intervals.length?==?0)?{
????????????return?intervals;
????????}
????????????Arrays.sort(intervals,?new?Comparator<int[]>()?{
????????????????public?int?compare(int[]?o1,?int[]?o2)?{
????????????????????if?(o1[0]?==?o2[0])?{
????????????????????????return?o1[1]?-?o2[1];
????????????????????}
????????????????????return?o1[0]?-?o2[0];
????????????????}
????????????});
????????int?a=intervals[0][0],b=intervals[0][1];
????int?nums[][]?=?new?int[intervals.length][2];
????if(intervals.length==1)
????{
????????return?intervals;
????}
????int?k=0;
????//System.out.println(a+"?"+b);
????for(int?i=1;i<intervals.length;i++)
????{
????????if(intervals[i][0]>=a&&b>=intervals[i][0])
????????{
????????????b?=?Math.max(b,?intervals[i][1]);
????????????
????????}
????????else
????????{
????????????nums[k][0]?=?a;
????????????nums[k][1]?=?b;
????????????k++;
????????????a?=?intervals[i][0];
????????????b?=?intervals[i][1];
????????}
????????nums[k][0]?=?a;
????????nums[k][1]?=?b;
????????//System.out.println(a+"?"+b);
????}
????int?n[][]?=?new?int[k+1][2];
????for(int?i=0;i<=k;i++)
????{
????????n[i][0]?=?nums[i][0];
????????n[i][1]?=?nums[i][1];
????}
????return?n;
????}
}
總結
以上是生活随笔為你收集整理的Leetcode--56. 合并区间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据编码信号调制
- 下一篇: Leetcode--19. 删除链表的倒