色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一篇文章秒殺三道區間相關的問題

算法與數據結構 ? 來源:算法與數據結構 ? 作者:labuladong ? 2020-10-12 14:54 ? 次閱讀

經常有讀者問區間相關的問題,今天寫一篇文章,秒殺三道區間相關的問題。

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

1、排序。常見的排序方法就是按照區間起點排序,或者先按照起點升序排序,若起點相同,則按照終點降序排序。當然,如果你非要按照終點排序,無非對稱操作,本質都是一樣的。

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

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

區間覆蓋問題

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

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

對于這種區間問題,如果沒啥頭緒,首先排個序看看,比如我們按照區間的起點進行升序排序:

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

對于這三種情況,我們應該這樣處理:

對于情況一,找到了覆蓋區間。

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

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

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

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

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

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

區間合并問題

力扣第 56 題就是一道相關問題,題目很好理解:

title

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

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

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

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

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

然后就可以寫出完整代碼

#intervals形如[[1,3],[2,6]...] defmerge(intervals): ifnotintervals:return[] #按區間的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: ????????????#?處理下一個待合并區間 ????????????res.append(curr) ????return?res

區間交集問題

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

title

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

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

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

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

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

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

ifb2

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

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

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

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

我們驚奇地發現,交集區間是有規律的!如果交集區間是[c1,c2],那么c1=max(a1,b1),c2=min(a2,b2)!這一點就是尋找交集的核心,我們把代碼更進一步:

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

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

結合動畫示例就很好理解了,是否前進,只取決于a2和b2的大小關系:

whilei

以此思路寫出代碼:

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

總結一下,區間類問題看起來都比較復雜,情況很多難以處理,但實際上通過觀察各種不同情況之間的共性可以發現規律,用簡潔的代碼就能處理。

責任編輯:xj

原文標題:一文秒殺所有區間相關問題

文章出處:【微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4791

    瀏覽量

    68680
  • 程序員
    +關注

    關注

    4

    文章

    952

    瀏覽量

    29811
  • 區間
    +關注

    關注

    0

    文章

    4

    瀏覽量

    8073

原文標題:一文秒殺所有區間相關問題

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

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

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

    種混合顏料光譜分區間識別方法

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

    ISO67xx三通道和四通數字隔離器評估模塊

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

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

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

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

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

    單粒子效應置信區間計算

    電子發燒友網站提供《單粒子效應置信區間計算.pdf》資料免費下載
    發表于 09-10 10:31 ?0次下載
    單粒子效應置信<b class='flag-5'>區間</b>計算

    TX7316級16通或五級8通發送器數據表

    電子發燒友網站提供《TX7316級16通或五級8通發送器數據表.pdf》資料免費下載
    發表于 07-29 11:34 ?0次下載
    TX7316<b class='flag-5'>三</b>級16通<b class='flag-5'>道</b>或五級8通<b class='flag-5'>道</b>發送器數據表

    【《大語言模型應用指南》閱讀體驗】+ 基礎

    今天開始學習《大語言模型應用指南》第一篇——基礎,對于人工智能相關專業技術人員應該可以輕松加愉快的完成此閱讀,但對于我還是有許多的知識點、專業術語比較陌生,需要網上搜索學習更多的資
    發表于 07-25 14:33

    STM32F103RC ADC采樣電壓的時候,有區間采樣不到是為什么?

    兄弟們,問個問題,STM32F103RC ADC采樣電壓的時候,有區間采樣不到(表現為ADC值沒有變化),比如,采樣0.3V-2.5V的電壓,0.407V-0.416V的范圍ADC值沒有變化
    發表于 04-25 07:52

    四通/三通道/雙通道窗口或標準電壓監控器TPS3704x數據表

    電子發燒友網站提供《四通/三通道/雙通道窗口或標準電壓監控器TPS3704x數據表.pdf》資料免費下載
    發表于 03-14 09:41 ?0次下載
    四通<b class='flag-5'>道</b>/<b class='flag-5'>三通道</b>/雙通道窗口或標準電壓監控器TPS3704x數據表

    STM32F427ZGT6 AD采樣2000-2048區間采樣異常跳動如何解決?

    問題描述:STM32F427ZGT6 ADC采樣,采用的ADC1 共3通,DMA數據讀出。采樣數據進行中值濾波,深度20。外圍電路設計:VSSA與AGND相連,VDDA通過個200mH電感相連
    發表于 03-14 06:41

    防平板電腦廠商哪家好丨麒麟系統防平板PAD

    隨著科技的飛速發展,人們對于移動設備的需求越來越高。然而,在不同的行業應用場景下,常規的智能平板往往無法滿足特殊的工作要求。,億防平板,將高可靠性與卓越性能高度結合,為各行各業提供卓越的移動
    的頭像 發表于 02-25 14:52 ?394次閱讀
    億<b class='flag-5'>道</b>丨<b class='flag-5'>三</b>防平板電腦廠商哪家好丨麒麟系統<b class='flag-5'>三</b>防平板PAD

    防平板為什么要支持1000nit高亮屏|億防onerugged

    向大家介紹防平板電腦中的個重要亮點——1000nit高亮屏。特別是億防onerugged系列產品,它們支持高亮屏的技術,為用戶提供了卓越的陽光可視性和視覺體驗。
    的頭像 發表于 02-19 17:58 ?610次閱讀

    TC275的CAN模塊如何配置區間接收?

    當前配置CAN模塊收發都是先會配置好PIN、CANID、MO等等,然后調用收發函數。現在比如我需要接收到外部0x100~0x200區間內任意的個CAN ID報文,需要怎么配置呢?不可能枚舉把所有都列出來把,如果MO不夠呢
    發表于 02-02 16:48

    ADP5051第三通道有5V的直流偏置怎么解決?

    你好,我電路板上ADP5051輸出四路電源,一二,四通分別輸出1.2V,2.5V,3.3V,且都正常,電路和datasheet上的參考圖樣,圖如下:;但第三通道輸出5V,不正常,測得SW上的波形
    發表于 01-08 08:13
    主站蜘蛛池模板: 一区一区三区产品| 亚洲视频第二页| 羞羞在线观看| 99久久久免费精品国产| 久久精品18| 亚洲网站视频在线观看| 国产婷婷色综合AV蜜臀AV| 欧美激情视频二区| AV色蜜桃一区二区三区| 麻豆XXXX乱女少妇精品| 中文字幕在线观看网址| 里番※琉璃全彩acg奈亚子| 一二三四韩国免费观看| 蝴蝶中文娱乐| 一本道色综合手机久久| 九九精彩视频在线观看视频| 亚洲色 图| 久久久青青| 91看片淫黄大片.在线天堂 | 神马电影dy888午夜我不卡| 俄罗斯女人Z0ZOZO| 乡村教师电影完整版在线观看| 国产亚洲AV无码成人网站| 妖精视频在线观看高清| 久就热视频精品免费99| 91精品国产免费入口| 琪琪色原网站ying| 国产AV视频一区二区蜜桃| 吸奶舔下面| 久久国产精品二区99| 799是什么意思网络用语| 欧美性视频xxxxhd| 国产精品VIDEOSSEX久久发布| 亚洲高清在线视频| 久色视频网| 超碰视频在线| 亚洲国产AV无码综合在线| 两个人在线观看的视频720 | 日韩精品真人荷官无码| 国产免费不卡| 91区国产福利在线观看午夜|