- 算法
- 1.贪心算法
- 2.每次射箭都尽可能多射中气球,然后继续下一次射箭
- 如何做到:
- 首先给气球排序,按照结束坐标排序;
- 每次射箭的位置就是气球的结束坐标,这样才能保证每次尽可能多的射中气球;
- 然后每次射箭时检查后面的气球能否跟当前气球一起射中,直到不能跟当前气球一起射中时,新起一支箭;
public int findMinArrowShots(int[][] points) {
if (points == null || points.length == 0) {
return 0;
}
Arrays.sort(points, Comparator.comparingInt(a -> a[1]));
int arrowPosition = points[0][1];
int arrowCount = 1;
for (int i = 0; i < points.length; i++) {
if (points[i][0] > arrowPosition) {
arrowPosition = points[i][1];
arrowCount++;
}
}
return arrowCount;
}
func findMinArrowShots(points [][]int) int {
if points == nil || len(points) == 0 {
return 0
}
sort.Sort(PointsBy2(points))
arrowPosition, arrowCount := points[0][1], 1
for i := 1; i < len(points); i++ {
if points[i][0] > arrowPosition {
arrowPosition, arrowCount = points[i][1], arrowCount + 1
}
}
return arrowCount
}
type PointsBy2 [][]int
func (p PointsBy2) Len() int { return len(p) }
func (p PointsBy2) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func (p PointsBy2) Less(i, j int) bool {
if p[i][1] < p[j][1] {
return true
} else {
return false
}
}