在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一篇文章秒殺三道區(qū)間相關(guān)的問題

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:算法與數(shù)據(jù)結(jié)構(gòu) ? 作者:labuladong ? 2020-10-12 14:54 ? 次閱讀

經(jīng)常有讀者問區(qū)間相關(guān)的問題,今天寫一篇文章,秒殺三道區(qū)間相關(guān)的問題。

所謂區(qū)間問題,就是線段問題,讓你合并所有線段、找出線段的交集等等。主要有兩個技巧:

1、排序。常見的排序方法就是按照區(qū)間起點(diǎn)排序,或者先按照起點(diǎn)升序排序,若起點(diǎn)相同,則按照終點(diǎn)降序排序。當(dāng)然,如果你非要按照終點(diǎn)排序,無非對稱操作,本質(zhì)都是一樣的。

2、畫圖。就是說不要偷懶,勤動手,兩個區(qū)間的相對位置到底有幾種可能,不同的相對位置我們的代碼應(yīng)該怎么去處理。

廢話不多說,下面我們來做題。

區(qū)間覆蓋問題

這是力扣第 1288 題,看下題目:

題目問我們,去除被覆蓋區(qū)間之后,還剩下多少區(qū)間,那么我們可以先算一算,被覆蓋區(qū)間有多少個,然后和總數(shù)相減就是剩余區(qū)間數(shù)。

對于這種區(qū)間問題,如果沒啥頭緒,首先排個序看看,比如我們按照區(qū)間的起點(diǎn)進(jìn)行升序排序:

排序之后,兩個相鄰區(qū)間可能有如下三種相對位置:

對于這三種情況,我們應(yīng)該這樣處理:

對于情況一,找到了覆蓋區(qū)間。

對于情況二,兩個區(qū)間可以合并,成一個大區(qū)間。

對于情況三,兩個區(qū)間完全不相交。

依據(jù)幾種情況,我們可以寫出如下代碼:

intremoveCoveredIntervals(int[][]intvs){ //按照起點(diǎn)升序排列,起點(diǎn)相同時降序排列 Arrays.sort(intvs,(a,b)->{ if(a[0]==b[0]){ returnb[1]-a[1]; } returna[0]-b[0]; }); //記錄合并區(qū)間的起點(diǎn)和終點(diǎn) intleft=intvs[0][0]; intright=intvs[0][1]; intres=0; for(inti=1;i=intv[1]){ res++; } //情況二,找到相交區(qū)間,合并 if(right>=intv[0]&&right<=?intv[1])?{ ????????????right?=?intv[1]; ????????} ????????//?情況三,完全不相交,更新起點(diǎn)和終點(diǎn) ????????if?(right?

以上就是本題的解法代碼,起點(diǎn)升序排列,終點(diǎn)降序排列的目的是防止如下情況:

對于這兩個起點(diǎn)相同的區(qū)間,我們需要保證長的那個區(qū)間在上面(按照終點(diǎn)降序),這樣才會被判定為覆蓋,否則會被錯誤地判定為相交,少算一個覆蓋區(qū)間。

區(qū)間合并問題

力扣第 56 題就是一道相關(guān)問題,題目很好理解:

title

我們解決區(qū)間問題的一般思路是先排序,然后觀察規(guī)律。

一個區(qū)間可以表示為[start, end],前文聊的區(qū)間調(diào)度問題,需要按end排序,以便滿足貪心選擇性質(zhì)。而對于區(qū)間合并問題,其實(shí)按end和start排序都可以,不過為了清晰起見,我們選擇按start排序。

顯然,對于幾個相交區(qū)間合并后的結(jié)果區(qū)間x,x.start一定是這些相交區(qū)間中start最小的,x.end一定是這些相交區(qū)間中end最大的。

由于已經(jīng)排了序,x.start很好確定,求x.end也很容易,可以類比在數(shù)組中找最大值的過程:

intmax_ele=arr[0]; for(inti=1;i

然后就可以寫出完整代碼

#intervals形如[[1,3],[2,6]...] defmerge(intervals): ifnotintervals:return[] #按區(qū)間的start升序排列 intervals.sort(key=lambdaintv:intv[0]) res=[] res.append(intervals[0]) foriinrange(1,len(intervals)): curr=intervals[i] #res中最后一個元素的引用 last=res[-1] ifcurr[0]<=?last[1]: ????????????#?找到最大的?end ????????????last[1]?=?max(last[1],?curr[1]) ????????else: ????????????#?處理下一個待合并區(qū)間 ????????????res.append(curr) ????return?res

區(qū)間交集問題

先看下題目,力扣第 986 題就是這個問題:

title

題目很好理解,就是讓你找交集,注意區(qū)間都是閉區(qū)間。

解決區(qū)間問題的思路一般是先排序,以便操作,不過題目說已經(jīng)排好序了,那么可以用兩個索引指針在A和B中游走,把交集找出來,代碼大概是這樣的:

#A,B形如[[0,2],[5,10]...] defintervalIntersection(A,B): i,j=0,0 res=[] whilei

不難,我們先老老實(shí)實(shí)分析一下各種情況。

首先,對于兩個區(qū)間,我們用[a1,a2]和[b1,b2]表示在A和B中的兩個區(qū)間,那么什么情況下這兩個區(qū)間沒有交集呢:

只有這兩種情況,寫成代碼的條件判斷就是這樣:

ifb2

那么,什么情況下,兩個區(qū)間存在交集呢?根據(jù)命題的否定,上面邏輯的否命題就是存在交集的條件:

#不等號取反,or也要變成and ifb2>=a1anda2>=b1: [a1,a2]和[b1,b2]存在交集

接下來,兩個區(qū)間存在交集的情況有哪些呢?窮舉出來:

這很簡單吧,就這四種情況而已。那么接下來思考,這幾種情況下,交集是否有什么共同點(diǎn)呢?

我們驚奇地發(fā)現(xiàn),交集區(qū)間是有規(guī)律的!如果交集區(qū)間是[c1,c2],那么c1=max(a1,b1),c2=min(a2,b2)!這一點(diǎn)就是尋找交集的核心,我們把代碼更進(jìn)一步:

whilei=a1anda2>=b1: res.append([max(a1,b1),min(a2,b2)]) #...

最后一步,我們的指針i和j肯定要前進(jìn)(遞增)的,什么時候應(yīng)該前進(jìn)呢?

結(jié)合動畫示例就很好理解了,是否前進(jìn),只取決于a2和b2的大小關(guān)系:

whilei

以此思路寫出代碼:

#A,B形如[[0,2],[5,10]...] defintervalIntersection(A,B): i,j=0,0#雙指針 res=[] whilei=a1anda2>=b1: #計(jì)算出交集,加入res res.append([max(a1,b1),min(a2,b2)]) #指針前進(jìn) ifb2

總結(jié)一下,區(qū)間類問題看起來都比較復(fù)雜,情況很多難以處理,但實(shí)際上通過觀察各種不同情況之間的共性可以發(fā)現(xiàn)規(guī)律,用簡潔的代碼就能處理。

責(zé)任編輯:xj

原文標(biāo)題:一文秒殺所有區(qū)間相關(guān)問題

文章出處:【微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4891

    瀏覽量

    70367
  • 程序員
    +關(guān)注

    關(guān)注

    4

    文章

    954

    瀏覽量

    30308
  • 區(qū)間
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8117

原文標(biāo)題:一文秒殺所有區(qū)間相關(guān)問題

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    1000+例各類獲獎電賽作品資料集(電路、代碼、教程文末免費(fèi)領(lǐng)取)

    學(xué)習(xí)和動手能力!、算法資料相關(guān)文件可在下文掃碼領(lǐng)取)二、優(yōu)秀作品相關(guān)文件可在下文掃碼領(lǐng)取)
    的頭像 發(fā)表于 05-22 11:41 ?120次閱讀
    1000+例各類獲獎電賽作品資料集(電路<b class='flag-5'>篇</b>、代碼<b class='flag-5'>篇</b>、教程<b class='flag-5'>篇</b>文末免費(fèi)領(lǐng)取)

    怎么利用matlab得到95%,80%和70%的置信區(qū)間,并生成不同區(qū)間下的功率誤差貝塔分布?

    matlab仿真 matlab新手,怎么利用matlab得到95%,80%和70%的置信區(qū)間,并生成不同區(qū)間下的功率誤差貝塔分布
    發(fā)表于 04-09 01:21

    【干貨】開關(guān)電源相關(guān)設(shè)計(jì)資料46--3

    重磅消息,開關(guān)電源相關(guān)設(shè)計(jì)資料46免費(fèi)送,需要可點(diǎn)擊附件下載查看哦!
    發(fā)表于 03-07 16:22

    【干貨】開關(guān)電源相關(guān)設(shè)計(jì)資料46--2

    重磅消息,開關(guān)電源相關(guān)設(shè)計(jì)資料46免費(fèi)送,需要可點(diǎn)擊附件下載查看哦! 由于上傳受限,資料分次上傳,大家可點(diǎn)擊下進(jìn)行下載查看哦。
    發(fā)表于 03-07 16:21

    【干貨】開關(guān)電源相關(guān)設(shè)計(jì)資料46--1

    重磅消息,開關(guān)電源相關(guān)設(shè)計(jì)資料46免費(fèi)送,需要可點(diǎn)擊附件下載查看哦! 由于上傳受限,資料分次上傳,大家可點(diǎn)擊下進(jìn)行下載查看哦。
    發(fā)表于 03-07 16:15

    ADS1278采集數(shù)據(jù)不對,偶爾出現(xiàn)后三通道的數(shù)據(jù)等于前三通道,請問這是什么原因?

    我用ADS1278,8通道,SPI模式,如果用CLK-11.0592Mhz的晶振,SCLK用5MHZ,數(shù)據(jù)采集正確,若果把晶振(CLK)提高到20M以上,SCK頻率提高,采集數(shù)據(jù)不對,偶爾出現(xiàn)后三通道的數(shù)據(jù)等于前三通道,請問這是什么原因,CLK與SCLK有嚴(yán)格要求嗎?
    發(fā)表于 02-13 08:26

    DAC的高次諧波為什么都會折疊回第奈奎斯特區(qū)間

    如題,在看到的DDS和DAC的資料上都會提到DAC內(nèi)部的非線性造成的高次諧波會被折疊回第奈奎斯特區(qū)間。不太理解的地方是DAC里并沒有采樣的過程啊?DAC只是個乘以sin(x)/x和低通濾波
    發(fā)表于 12-11 07:05

    種混合顏料光譜分區(qū)間識別方法

    古代彩繪顏料的分析是科技考古與文物保護(hù)研究的重要內(nèi)容,高光譜是近年來發(fā)展迅速的新興技術(shù),在物質(zhì)識別上具有廣泛應(yīng)用,提出種基于高光譜分區(qū)間的混合顏料識別方法。 種混合顏料光譜分區(qū)間
    的頭像 發(fā)表于 12-02 16:22 ?405次閱讀
    <b class='flag-5'>一</b>種混合顏料光譜分<b class='flag-5'>區(qū)間</b>識別方法

    ISO67xx三通道和四通數(shù)字隔離器評估模塊

    電子發(fā)燒友網(wǎng)站提供《ISO67xx三通道和四通數(shù)字隔離器評估模塊.pdf》資料免費(fèi)下載
    發(fā)表于 11-25 14:19 ?0次下載
    ISO67xx<b class='flag-5'>三通道</b>和四通<b class='flag-5'>道</b>數(shù)字隔離器評估模塊

    PCM1864可以接8通模擬輸入嗎?

    準(zhǔn)備做32通音頻采集,在選音頻adc時候,中意PCM1864這顆芯片。現(xiàn)在疑問是 PCM1864數(shù)據(jù)手冊寫的是4通,但是發(fā)現(xiàn)管腳是4通左,4通右,這是不是意味著
    發(fā)表于 10-15 06:42

    求解智能韌性,華為用方程寫下答案

    續(xù)寫麥特卡夫定律,華為用方程解鎖智能韌性
    的頭像 發(fā)表于 09-30 14:37 ?2403次閱讀
    求解智能韌性,華為用<b class='flag-5'>三</b><b class='flag-5'>道</b>方程寫下答案

    單粒子效應(yīng)置信區(qū)間計(jì)算

    電子發(fā)燒友網(wǎng)站提供《單粒子效應(yīng)置信區(qū)間計(jì)算.pdf》資料免費(fèi)下載
    發(fā)表于 09-10 10:31 ?0次下載
    單粒子效應(yīng)置信<b class='flag-5'>區(qū)間</b>計(jì)算

    ISO71xxCC 4242VPK小封裝低功耗三通道和四通數(shù)字隔離器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《ISO71xxCC 4242VPK小封裝低功耗三通道和四通數(shù)字隔離器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-19 11:40 ?0次下載
    ISO71xxCC 4242VPK小封裝低功耗<b class='flag-5'>三通道</b>和四通<b class='flag-5'>道</b>數(shù)字隔離器數(shù)據(jù)表

    TX7316級16通或五級8通發(fā)送器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TX7316級16通或五級8通發(fā)送器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-29 11:34 ?1次下載
    TX7316<b class='flag-5'>三</b>級16通<b class='flag-5'>道</b>或五級8通<b class='flag-5'>道</b>發(fā)送器數(shù)據(jù)表

    【《大語言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)

    今天開始學(xué)習(xí)《大語言模型應(yīng)用指南》第一篇——基礎(chǔ),對于人工智能相關(guān)專業(yè)技術(shù)人員應(yīng)該可以輕松加愉快的完成此閱讀,但對于我還是有許多的知識點(diǎn)、專業(yè)術(shù)語比較陌生,需要網(wǎng)上搜索學(xué)習(xí)更多的資
    發(fā)表于 07-25 14:33
    主站蜘蛛池模板: 日本免费一区二区三区视频 | 精品无码三级在线观看视频 | 欧美黄色免费看 | 国产精品久久久久久久午夜片 | 毛片综合 | 亚欧有色亚欧乱色视频 | 手机看片自拍自自拍日韩免费 | 免费一级特黄特色大片在线观看看 | 国产成人精品男人的天堂538 | 人人洗澡人人洗澡人人 | 夜夜爽毛片 | 国产色婷婷精品免费视频 | 国产婷婷综合在线精品尤物 | 永久免费视频网站在线观看 | 亚洲综合区图片小说区 | 好紧好湿好黄的视频 | haodiaose在线精品免费观看 | 美女被猛男躁免费视频网站 | 欧美三级一区 | 玖玖在线国产精品 | 日日夜夜天天干 | 高清一级毛片一本到免费观看 | 国产综合在线视频 | 黄色大片在线免费观看 | 日韩久久精品视频 | 天天射日日干 | xxxx久久| 免费一级毛片私人影院a行 免费一级毛片无毒不卡 | 日日噜噜噜噜人人爽亚洲精品 | 黄视频免费网站 | 亚洲婷婷国产精品电影人久久 | 手机在线电影你懂的 | 亚洲伊人99综合网 | 日处女穴 | 国产精品九九久久一区hh | 很黄很暴力 很污秽的小说 很黄很黄叫声床戏免费视频 | 欧美一级视频在线 | 国产一区二区在线观看免费 | 日韩一级片免费观看 | 国产精品29页 | 亚州 色 图 综合 |