LeetCode 452:用最少数量的箭引爆气球(贪心)

曾经终败给现在 2024-04-07 13:22 154阅读 0赞

链接

题目
在这里插入图片描述

方法一:贪心

思路:

  1. 按照区间的end进行排序,
  2. 如果下一个区间的start > 上一个区间的x_end,则不重叠,可以放入x,count++;
  3. 所有不重叠的个数即为需要的弓箭数量;

注意

  1. 存在用例 :[[-2147483646,-2147483645],[2147483646,2147483647]]
    当compare在比较时,int会溢出!
    所以用 Integer.compare()
  2. 这里是start > x_end ,没有等号;

Java实现

  1. class Solution {
  2. public int findMinArrowShots(int[][] points) {
  3. // 贪心 ,即求不重叠的区间个数!
  4. // 先排序
  5. Arrays.sort(points,new Comparator<int[]>(){
  6. @Override
  7. public int compare(int[] a,int[] b){
  8. return Integer.compare(a[1],b[1]);
  9. }
  10. });
  11. // 筛选出不重叠的
  12. int x_end=points[0][1];
  13. int count=1;
  14. for(int i=1;i<points.length;i++){
  15. int start=points[i][0];
  16. if(start > x_end){
  17. count++;
  18. x_end=points[i][1];
  19. }
  20. }
  21. return count;
  22. }
  23. }

发表评论

表情:
评论列表 (有 0 条评论,154人围观)

还没有评论,来说两句吧...

相关阅读