面试150——区间

并集


合并区间思路

合并区间是区间间取并集,最终返回所有的并集。按照左端点升序排序,不断更新右端点最大值,直到无法更新,则开新区间。
代码

java 复制代码
class Solution {
    public int[][] merge(int[][] intervals) {
        int n = intervals.length;
        if (n == 0) return new int[0][0];
        Arrays.sort(intervals, (a, b)->(a[0] - b[0]));
        List<int[]> list = new ArrayList<>();
        for (int i = 0; i < n; i ++) {
            if (i == 0 || list.getLast()[1] < intervals[i][0]) {
                list.add(new int[] {intervals[i][0], intervals[i][1]}); // 没去可以合并的区间,则开新区间
            } else {
                list.getLast()[1] = Math.max(list.getLast()[1], intervals[i][1]); // 合并区间
            }
        }
        return list.toArray(new int[list.size()][2]);
    }
}

交集


交集思路

每次射都要射相交的部分,要使用的箭最少。则找到所有区间最少得相交的划分。每个区间在所有区间尽可能囊括多的有公共部分的区间,则这个区间的右边要大于囊括区间的左边。一种贪心的思路,右边越短的,希望囊括右边越短的。所以将右边按照升序排序。
代码

java 复制代码
// 每次射希望能够射得最多,也就是每次找到重叠最多的气球
// 重叠部分是由一段区间最早结束的部分能覆盖多少决定的,所以按照区间右端点排序
class Solution {
    public int findMinArrowShots(int[][] points) {
        if (points == null) return 0;
        int n = points.length;
        if (n == 0) return 0;
        Arrays.sort(points, (a, b) -> Integer.compare(a[1], b[1]));
        int res = 0, right = 0;
        for (int i = 0; i < n; i ++) {
            if (i == 0 || right < points[i][0]) {
                res ++;
                right = points[i][1];
            }
        }
        return res;
    }
}
相关推荐
M ? A10 小时前
Vue 的 scoped 样式穿透 React 不支持?用 VuReact 编译就行
前端·javascript·vue.js·react.js·面试·开源·vureact
极客沐森10 小时前
如何取消大批量的超时订单,关于超时架构的探讨
面试·架构
豹哥学前端11 小时前
10分钟彻底搞懂 window 对象、全局环境与 JS 引擎
前端·面试
一只机电自动化菜鸟13 小时前
一建机电备考笔记(27)测量技术—仪器(含考频+题型)
经验分享·笔记·学习·职场和发展·求职招聘·课程设计
白晨并不是很能熬夜13 小时前
【RPC】第 1 篇:全景篇 — 一次 RPC 调用的完整旅程
java·网络·后端·网络协议·面试·rpc·java-zookeeper
用户990450177800914 小时前
TrendRadar 热榜监控系统部署与二次开发服务
面试
ulias21215 小时前
leetcode热题 - 4
算法·leetcode·职场和发展
2501_9130613416 小时前
JVM虚拟机——面试中的八股文
java·jvm·面试
测试199816 小时前
Selenium自动化测试框架的搭建
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
浅念-16 小时前
分治算法专题|LeetCode高频经典题目详细题解
数据结构·c++·算法·leetcode·职场和发展·排序·分治