
【解题思路】
只有两个集合有交集,那么交集处就可以用一支箭击破这两个气球。使用贪心算法对points[ ][ ]按照第一位数、第二位数从小到大的顺序排序,让相近的集合尽可能排在相邻的位置,可以用最少的箭击破所有气球。设置一个rPoint表示下一支箭可以击破的气球的右边界,在这个右边界左边的气球都可以被击破,而在右边界右边的气球,需要等下一支箭击破。
class Solution {
public int findMinArrowShots(int[][] points) {
int n = points.length;
Arrays.sort(points, new Comparator<int[]>(){
public int compare(int[] a, int[] b)
{
if(a[0] == b[0]) return a[1]<b[1]?-1:1;
return a[0]<b[0]?-1:1;
}
});
int ans = 1;
//int lPoint = points[0][0];
int rPoint = points[0][1];
for(int i = 1; i < n; i++)
{
if(points[i][0] > rPoint)
{
ans++;
rPoint = points[i][1];
}
else{
if(points[i][1] < rPoint)
{
rPoint = points[i][1];
}
}
}
return ans;
}
}
这篇博客探讨了一种利用贪心算法解决计算机科学中的经典问题——如何用最少数量的箭来击破二维空间中的一系列气球。具体而言,作者通过排序气球的起始和结束坐标,确保相邻的气球尽可能靠近,从而减少所需的箭数。代码示例展示了如何实现这一算法,主要涉及数组排序和区间判断,是算法和数据结构学习的良好实践。
266

被折叠的 条评论
为什么被折叠?



