国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

我們一起用最少數量的箭引爆氣球

開發 前端
在二維空間中有許多球形的氣球。對于每個氣球,提供的輸入是水平方向上,氣球直徑的開始和結束坐標。由于它是水平的,所以縱坐標并不重要,因此只要知道開始和結束的橫坐標就足夠了。

[[437587]]

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

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

給你一個數組 points ,其中 points [i] = [xstart,xend] ,返回引爆所有氣球所必須射出的最小弓箭數。

示例 1:

  • 輸入:points = [[10,16],[2,8],[1,6],[7,12]]
  • 輸出:2
  • 解釋:對于該樣例,x = 6 可以射爆 [2,8],[1,6] 兩個氣球,以及 x = 11 射爆另外兩個氣球

示例 2:

  • 輸入:points = [[1,2],[3,4],[5,6],[7,8]]
  • 輸出:4

示例 3:

  • 輸入:points = [[1,2],[2,3],[3,4],[4,5]]
  • 輸出:2

示例 4:

  • 輸入:points = [[1,2]]
  • 輸出:1

示例 5:

  • 輸入:points = [[2,3],[2,3]]
  • 輸出:1

提示:

  • 0 <= points.length <= 10^4
  • points[i].length == 2
  • -2^31 <= xstart < xend <= 2^31 - 1

思路

如何使用最少的弓箭呢?

直覺上來看,貌似只射重疊最多的氣球,用的弓箭一定最少,那么有沒有當前重疊了三個氣球,我射兩個,留下一個和后面的一起射這樣弓箭用的更少的情況呢?

嘗試一下舉反例,發現沒有這種情況。

那么就試一試貪心吧!局部最優:當氣球出現重疊,一起射,所用弓箭最少。全局最優:把所有氣球射爆所用弓箭最少。

算法確定下來了,那么如何模擬氣球射爆的過程呢?是在數組中移除元素還是做標記呢?

如果真實的模擬射氣球的過程,應該射一個,氣球數組就remove一個元素,這樣最直觀,畢竟氣球被射了。

但仔細思考一下就發現:如果把氣球排序之后,從前到后遍歷氣球,被射過的氣球僅僅跳過就行了,沒有必要讓氣球數組remote氣球,只要記錄一下箭的數量就可以了。

以上為思考過程,已經確定下來使用貪心了,那么開始解題。

為了讓氣球盡可能的重疊,需要對數組進行排序。

那么按照氣球起始位置排序,還是按照氣球終止位置排序呢?

其實都可以!只不過對應的遍歷順序不同,我就按照氣球的起始位置排序了。

既然按照起始位置排序,那么就從前向后遍歷氣球數組,靠左盡可能讓氣球重復。

從前向后遍歷遇到重疊的氣球了怎么辦?

如果氣球重疊了,重疊氣球中右邊邊界的最小值 之前的區間一定需要一個弓箭。

以題目示例:[[10,16],[2,8],[1,6],[7,12]]為例,如圖:(方便起見,已經排序)

用最少數量的箭引爆氣球

可以看出首先第一組重疊氣球,一定是需要一個箭,氣球3,的左邊界大于了 第一組重疊氣球的最小右邊界,所以再需要一支箭來射氣球3了。

C++代碼如下:

  1. class Solution { 
  2. private: 
  3.     static bool cmp(const vector<int>& a, const vector<int>& b) { 
  4.         return a[0] < b[0]; 
  5.     } 
  6. public
  7.     int findMinArrowShots(vector<vector<int>>& points) { 
  8.         if (points.size() == 0) return 0; 
  9.         sort(points.begin(), points.end(), cmp); 
  10.  
  11.         int result = 1; // points 不為空至少需要一支箭 
  12.         for (int i = 1; i < points.size(); i++) { 
  13.             if (points[i][0] > points[i - 1][1]) {  // 氣球i和氣球i-1不挨著,注意這里不是>= 
  14.                 result++; // 需要一支箭 
  15.             } 
  16.             else {  // 氣球i和氣球i-1挨著 
  17.                 points[i][1] = min(points[i - 1][1], points[i][1]); // 更新重疊氣球最小右邊界 
  18.             } 
  19.         } 
  20.         return result; 
  21.     } 
  22. }; 
  • 時間復雜度O(nlogn),因為有一個快排
  • 空間復雜度O(1)

可以看出代碼并不復雜。

注意事項

注意題目中說的是:滿足 xstart ≤ x ≤ xend,則該氣球會被引爆。那么說明兩個氣球挨在一起不重疊也可以一起射爆,

所以代碼中 if (points[i][0] > points[i - 1][1]) 不能是>=

總結

這道題目貪心的思路很簡單也很直接,就是重復的一起射了,但本題我認為是有難度的。

就算思路都想好了,模擬射氣球的過程,很多同學真的要去模擬了,實時把氣球從數組中移走,這么寫的話就復雜了。

而且尋找重復的氣球,尋找重疊氣球最小右邊界,其實都有代碼技巧。

貪心題目有時候就是這樣,看起來很簡單,思路很直接,但是一寫代碼就感覺賊復雜無從下手。

這里其實是需要代碼功底的,那代碼功底怎么練?

本文轉載自微信公眾號「代碼隨想錄」,可以通過以下二維碼關注。轉載本文請聯系代碼隨想錄公眾號。

 

責任編輯:武曉燕 來源: 代碼隨想錄
相關推薦

2012-07-27 13:36:00

Office操作系統

2021-05-07 11:29:54

MacFlutter開發

2023-03-28 08:12:06

優化系統IOPS

2021-01-13 09:07:32

MySQLOrderLimit

2022-10-08 00:00:05

SQL機制結構

2017-01-22 15:09:08

架構閉環演進

2023-04-26 07:30:00

promptUI非結構化

2022-03-31 18:59:43

數據庫InnoDBMySQL

2023-08-04 08:20:56

DockerfileDocker工具

2023-08-10 08:28:46

網絡編程通信

2021-08-27 07:06:09

DubboDocker技術

2022-10-18 07:33:57

Maven構建工具

2022-05-24 08:21:16

數據安全API

2021-01-12 05:08:49

DHCP協議模型

2023-09-10 21:42:31

2023-06-30 08:18:51

敏捷開發模式

2021-12-29 08:27:05

ByteBuffer磁盤服務器

2021-07-28 07:53:20

Github ActiDotnet 應用

2021-08-27 07:06:10

IOJava抽象

2024-02-20 21:34:16

循環GolangGo
點贊
收藏

51CTO技術棧公眾號

国产免费观看久久| 欧美体内she精视频在线观看| 成人欧美一区二区三区黑人麻豆 | 日韩欧美一区在线观看| 日本夜爽爽一二区| 国产精品小仙女| 日韩欧美在线电影| 首页国产精品| 国产精品狠色婷| 你懂的在线观看一区二区| 精品国产欧美一区二区五十路| 欧美aaa免费| 欧美一级一区二区| 最新国产在线拍揄自揄视频| 欧美日韩高清一区二区三区| 国产h在线观看| 欧美中文字幕一区| 成人77777| 欧美日本国产视频| 在线观看完整版免费| 一本久道久久综合中文字幕| 奇米影视888狠狠狠777不卡| 欧美日韩国产中文字幕| bdsm精品捆绑chinese| 亚洲国产色一区| 午夜在线观看91| 岛国av一区二区三区| 在线观看污网站| 在线这里只有精品| 国产区在线观看| 欧美成人福利视频| 原纱央莉成人av片| 美女性感视频久久久| 青青一区二区| 国产精品视频久久久| 亚洲字幕久久| 欧美激情一区二区三区在线视频| 日韩精品电影一区亚洲| 狠狠噜天天噜日日噜| 91丨九色丨黑人外教| 亚洲欧美自拍另类日韩| 亚洲国产aⅴ天堂久久| 欧美成人三区| 亚洲天堂开心观看| 豆花视频一区二区| 成人免费视频网| 亚洲狠狠婷婷| 伊人久久婷婷色综合98网| yourporn久久国产精品| 欧美第一页浮力影院| 欧美三级免费观看| 国产精品论坛| 久久久噜噜噜久久久| 亚洲欧美日韩高清在线| 日韩av电影免费观看| eeuss国产一区二区三区| 骚视频在线观看| 777午夜精品视频在线播放| 欧美片第一页| 国产不卡一区二区在线播放| 美女诱惑一区| 亚洲福利精品视频| 欧美精品高清视频| 国产精品久久久久久av公交车| 国产精欧美一区二区三区| 久久综合网络一区二区| 欧美成人黄色网址| 欧美精品三级日韩久久| 精品一区二区三区中文字幕视频| 国产精品网站入口| 国产在线播放一区三区四| 国产视频97| 亚洲精品国产精品自产a区红杏吧| 不卡精品视频| 官网99热精品| 国产成人ay| 自拍偷拍视频在线| 一区二区三区波多野结衣在线观看| 99热国产在线| 午夜精品久久久久久99热| 性一交一乱一区二区洋洋av| 国产偷人视频免费| 色综合天天综合色综合av| 一级欧美视频| 国产精品亚洲不卡a| 99视频一区二区| 在线免费av电影| 2018日韩中文字幕| 久久99精品久久久久久久久久久久| 神马午夜dy888| 色悠悠久久久久| 亚洲第一伊人| 国产男女爽爽爽| 影音先锋欧美精品| 国产精品嫩草99av在线| 免费特级黄毛片| 久久久91精品国产一区不卡| 久久综合九色| 蜜桃视频在线入口www| 久久久亚洲国产| 粉嫩在线一区二区三区视频| www.成人.com| 国产精品丝袜白浆摸在线 | 夜夜揉揉日日人人青青一国产精品 | 久久激情五月激情| 日韩大胆人体| 日本精品一区二区三区在线| 豆国产96在线|亚洲| 欧美黑人猛交的在线视频| 成人免费观看网站| 婷婷丁香久久五月婷婷| 国产伦精品一区二区三区视频| 久久精品视频91| 伊人伊人伊人久久| 国模大尺度一区二区三区| 男女啪啪在线观看| 成人免费在线视频网址| 国产精品电影一区二区| 欧美区一区二区| 成人av一级片| 国产亚洲欧美日韩精品| 蘑菇福利视频一区播放| 福利视频网站| 久久精品人人做人人爽| av高清不卡在线| 97久久香蕉国产线看观看| 韩国成人动漫在线观看| 亚洲网友自拍偷拍| 久久91麻豆精品一区| 2019日韩中文字幕mv| 精品成人一区二区| 日本视频在线一区| av在线二区| 精品久久久久久亚洲| 一区二区三区四区高清精品免费观看| heyzo欧美激情| 缅甸午夜性猛交xxxx| 日韩视频中文字幕| 激情五月婷婷综合| 成人在线爆射| 男女私大尺度视频| 亚洲欧洲视频在线| 91美女在线观看| 永久免费观看精品视频| 天天干天天草天天| 国外成人在线播放| 狠狠操狠狠色综合网| 日韩理论电影院| 国产视频网址在线| 亚洲一区二区三区涩| 亚洲第一在线视频| 久久99精品国产91久久来源| 日韩国产在线不卡视频| 色噜噜狠狠永久免费| 精品自在线视频| 亚洲国产视频a| 欧美大电影免费观看| 国产91免费视频| 欧美午夜免费电影| 中文字幕免费一区二区三区| 欧美调教sm| 国产精品成人av在线| 国产精品久久久久久久久搜平片| 国产精品99久久久久久董美香 | 四虎永久在线精品免费一区二区| 精品久久久久久久久久久久久久久 | 国产成人调教视频在线观看| 日本福利视频在线| 久久99国产精品自在自在app| 久久毛片高清国产| 国产精品毛片久久久| www亚洲成人| 国产成人精品视| 亚洲精品日日夜夜| av成人黄色| xxxxxx欧美| 日本三级免费观看| 日韩女优在线播放| 色偷偷一区二区三区| 色小子综合网| 手机在线免费观看av| avav在线播放| 色综合色综合网色综合| 一区二区三区影院| 国内在线观看一区二区三区| 久草在线视频福利| 精品一区二区中文字幕| 2019中文在线观看| 欧美三级中文字| 成人午夜激情影院| 日韩激情网站| 电影在线观看一区| 亚洲激情在线观看视频| 91精品久久久久久久久久另类| 日韩视频免费观看高清在线视频| 国产jizzjizz一区二区| 欧美日韩三级| 久久久加勒比| 蜜桃成人在线视频| 18禁免费观看网站|