用最少數量的箭引爆氣球

2021-09-22 23:06:51 字數 630 閱讀 6545

/*

思考:首先將樣例畫圖,找出規律理解題意,其次舉例子,1個氣球最少用1個箭,2個重疊氣球最少用乙個箭,3個重疊氣球最少用乙個箭

因此,盡量使氣球重疊部分最多一些,那麼如何演算法化呢?當然是排序,然後遍歷維護射擊區間。

1,排序,按照左端點。

2,遍歷氣球陣列,維護乙個設計區間,初始化就是第乙個氣球的區間,同時貪心盡可能多的擊穿更多氣球,然後更新設計區間。

3,直到沒有新的氣球可以被擊穿,那麼增加箭,同時維護乙個新的射擊區間。

*/bool cmp(const std::vector&a, const std::vector&b)

class solution

std::sort(points.begin(), points.end(), cmp);//按照左端點排序

int shoot_num = 1;

int shoot_begin = points[0][0];

int shoot_end = points[0][1];//初始化弓箭數目,第乙個維護射擊區間,就是第乙個氣球的左右端點

for (int i = 1; i < points.size(); i++)

}else

}return shoot_num;    }};

用最少數量的箭引爆氣球

在二維空間中有許多球形的氣球。對於每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束座標。由於它是水平的,所以y座標並不重要,因此只要知道開始和結束的x座標就足夠了。開始座標總是小於結束座標。平面內最多存在104個氣球。一支弓箭可以沿著x軸從不同點完全垂直地射出。在座標x處射出一支箭,若有乙個氣...

用最少數量的箭引爆氣球

在二維空間中有許多球形的氣球。對於每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束座標。由於它是水平的,所以y座標並不重要,因此只要知道開始和結束的x座標就足夠了。開始座標總是小於結束座標。平面內最多存在104個氣球。一支弓箭可以沿著x軸從不同點完全垂直地射出。在座標x處射出一支箭,若有乙個氣...

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

在二維空間中有許多球形的氣球。對於每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束座標。由於它是水平的,所以y座標並不重要,因此只要知道開始和結束的x座標就足夠了。開始座標總是小於結束座標。平面內最多存在104個氣球。一支弓箭可以沿著x軸從不同點完全垂直地射出。在座標x處射出一支箭,若有乙個氣...