方法一:贪心
思路:
- 按照区间的end进行排序,
- 如果下一个区间的start > 上一个区间的x_end,则不重叠,可以放入x,count++;
- 所有不重叠的个数即为需要的弓箭数量;
注意:
- 存在用例 :
[[-2147483646,-2147483645],[2147483646,2147483647]]
当compare在比较时,int会溢出!
所以用Integer.compare()
- 这里是start > x_end ,没有等号;
Java实现:
class Solution {
public int findMinArrowShots(int[][] points) {
// 贪心 ,即求不重叠的区间个数!
// 先排序
Arrays.sort(points,new Comparator<int[]>(){
@Override
public int compare(int[] a,int[] b){
return Integer.compare(a[1],b[1]);
}
});
// 筛选出不重叠的
int x_end=points[0][1];
int count=1;
for(int i=1;i<points.length;i++){
int start=points[i][0];
if(start > x_end){
count++;
x_end=points[i][1];
}
}
return count;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/89182.html