1. 程式人生 > >leetcode:(452) Mininum Number of Arrows To Burst Balloons(java)

leetcode:(452) Mininum Number of Arrows To Burst Balloons(java)

題目:

    

There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided input is the start and end coordinates of the horizontal diameter. Since it's horizontal, y-coordinates don't matter and hence the x-coordinates of start and end of the diameter suffice. Start is always smaller than end. There will be at most 104 balloons.

An arrow can be shot up exactly vertically from different points along the x-axis. A balloon with xstart and xend bursts by an arrow shot at x if xstart ≤ x ≤ xend. There is no limit to the number of arrows that can be shot. An arrow once shot keeps travelling up infinitely. The problem is to find the minimum number of arrows that must be shot to burst all balloons.

Example:

Input:
[[10,16], [2,8], [1,6], [7,12]]

Output:
2

Explanation:
One way is to shoot one arrow for example at x = 6 (bursting the balloons [2,8] and [1,6]) and another arrow at x = 11 (bursting the other two balloons).

題目描述:

       將熱氣球放到橫座標上,每個一維陣列索引0和1處的值分別代表每個氣球的起始和結束的橫座標值,計算座標不重複的熱氣球數量。

具體程式碼及思路如下:

package Leetcode_Github;

import java.util.Arrays;
import java.util.Comparator;

public class GreedyThought_FindMinArrowShots_452_1108 {
    public int findMinArrowShots(int[][] points) {
        if (points == null || points.length == 0) {
            return 0;
        }

        //將陣列按照points[1]位置數值進行升序排列
        Arrays.sort(points, Comparator.comparingInt(o -> o[1]));

        int count = 1;
        int end = points[0][1];
        int i = 1;
        while (i < points.length) {
            if (points[i][0] <= end) {
                i++;
                continue;
            }
            end = points[i][1];
            count++;
            i++;
        }
        return count;
    }
}