中级农民
- 积分
- 118
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-11-11
- 最后登录
- 1970-1-1
|
文档我就暂时不更新了,我会在这个主题下更新,到一定阶段再更发布更新的文档。
452. Minimum Number of Arrows to Burst Balloons
这道题也是Interval的类型,解题思路也是排序和贪心算法。
贪心算法的思路是:尽量找一支箭可以刺穿的气球数,也就是找交集。
以下是我的代码,可能不是最优最简洁的,但是我觉得比较好理解。
- public int findMinArrowShots(int[][] points) {
- Arrays.sort(points, (a, b) -> a[0] - b[0]);
- if (points.length <= 1) return points.length;
- int[] intersection = points[0];
- int count = 1;
- for (int i = 1; i < points.length; i++) {
- int[] next = points[i];
- intersection = intersection(intersection, next);
- if (intersection == null) {
- count++;
- intersection = next;
- }
- }
- return count;
- }
- private int[] intersection(int[] a, int[] b) {
- if (a[1] < b[0] || a[0] > b[1]) return null;
- return new int[]{Math.max(a[0], b[0]), Math.min(a[1], b[1])};
- }
复制代码
再次谢谢 @xiana406
补充内容 (2019-5-4 19:36):
不好意思,笔记本太老旧了,打字老丢字:贪心算法是让一支箭刺穿尽量多的气球,也就是求交集。 |
|