theme: fancy
开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第34天,点击查看活动详情
前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
依旧先排序,对于二维数组的排序我们采用如下:
Arrays.sort(intervals, (a, b) -> {
return a[1] - b[1];
});
我们按照区间右边界升序排序,上面是固定写法。如果是降序就是b[1] - a[1]
接下来就去遍历二位数组,如果
- 上一个区间的右边界小于当前区间的左边界,说明无交集
- 否则就要减去一个区间,但是我们不用真把它从数组中去掉,我们用count模拟次数即可
最后把count返回即可~
我们依旧是看下图,把所有的一维数组中的右边界提取出来,然后代入判断
是不是和上一题很像呢?其实差不多的,比较完都要对边界进行更新,通过这种方式即可计算出需要几次剔除才能得到无重叠的区间!
完整代码
看不懂?没办法,多写多练多总结!
还是带入代码到示例中多去总结多练习!
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> {
// 按照区间右边界升序排序
return a[1] - b[1];
});
int count = 0;
int edge = Integer.MIN_VALUE;
for (int i = 0; i < intervals.length; i++) {
// 若上一个区间的右边界小于当前区间的左边界,说明无交集
if (edge <= intervals[i][0]) {
edge = intervals[i][1];
} else {
count++;
}
}
return count;
}
}