LeetCode 56:合并区间 (贪心)

导读:本篇文章讲解 LeetCode 56:合并区间 (贪心),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

链接

题目
在这里插入图片描述

思路:排序+双指针

  1. 对区间的 start 进行排序;
  2. 第 i 个区间作为基准,和 第 i+1个区间比较,【当两区间重叠时】,并且 i+1 还不是最后一个区间时,贪心选择 R的最大值,所以要用 while
  3. 【当 i 和 i+1 区间不重叠】,或者 i是最后一个区间时,添加到 r !
class Solution {
    public int[][] merge(int[][] intervals) {
        // 按照 start 排序
        Arrays.sort(intervals, new Comparator<int[]>(){
            public int compare(int[] a,int[] b){
                return Integer.compare(a[0],b[0]);
            }
        });
        List<int[]> r=new ArrayList<>();
        int i=0;
        int n=intervals.length;
        while(i<n){
            // 第 i 个区间作为基准; 
            int L=intervals[i][0];
            int R=intervals[i][1];
            
            while(i<n-1 && intervals[i+1][0]<=R){  / i+1和i 重叠时,并注意防止越界 
                i++;
                // 第i+1个区间;
                R=Math.max(R,intervals[i][1]);  
            }
            // 1.i+1和i不重叠; 2. i已经是最后一个区间,i+1越界
            r.add(new int[]{L,R});
            i++;
        }
        int[][] res=r.toArray(new int[r.size()][]);
        return res;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89173.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!