1. 程式人生 > >Leetcode 452.用最少數量的箭引爆氣球

Leetcode 452.用最少數量的箭引爆氣球

限制 tco 垂直 rri tor all .so err mil

用最少數量的箭引爆氣球

在二維空間中有許多球形的氣球。對於每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束坐標。由於它是水平的,所以y坐標並不重要,因此只要知道開始和結束的x坐標就足夠了。開始坐標總是小於結束坐標。平面內最多存在104個氣球。

一支弓箭可以沿著x軸從不同點完全垂直地射出。在坐標x處射出一支箭,若有一個氣球的直徑的開始和結束坐標為 xstart,xend, 且滿足 xstart ≤ x ≤ xend,則該氣球會被引爆可以射出的弓箭的數量沒有限制。 弓箭一旦被射出之後,可以無限地前進。我們想找到使得所有氣球全部被引爆,所需的弓箭的最小數量。

Example:

輸入:

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

輸出:

2

解釋:

對於該樣例,我們可以在x = 6(射爆[2,8],[1,6]兩個氣球)和 x = 11(射爆另外兩個氣球)。

思路

技術分享圖片

 1 class Solution {
 2     public int findMinArrowShots(int[][] points) {
 3         if(points.length==0)
 4             return 0;
 5         Ballon[] ballons = new Ballon[points.length];
6 for(int i=0;i<points.length;i++) 7 ballons[i]=new Ballon(points[i][0],points[i][1]); 8 9 Arrays.sort(ballons, new Comparator<Ballon>() { 10 @Override 11 public int compare(Ballon o1, Ballon o2) { 12 return o1.end-o2.end;
13 } 14 }); 15 int ans = 1; 16 int right = ballons[0].end; 17 for(Ballon ballon:ballons) 18 { 19 if(ballon.start>right) 20 { 21 right=ballon.end; 22 ans++; 23 } 24 } 25 return ans; 26 27 } 28 } 29 30 class Ballon{ 31 int start; 32 int end; 33 34 public Ballon(int start, int end) { 35 this.start = start; 36 this.end = end; 37 } 38 }

Leetcode 452.用最少數量的箭引爆氣球