谷歌面經(jīng)Perfect Rectangle【掃描線】

核心思想就是:能夠正好圍成一個(gè)矩形的情況就是:

有且只有:

- 最左下 最左上 最右下 最右上 的四個(gè)點(diǎn)只出現(xiàn)過一次,其他肯定是成對(duì)出現(xiàn)的(保證完全覆蓋)

- 上面四個(gè)點(diǎn)圍成的面積,正好等于所有子矩形的面積之和(保證不重復(fù))

掃描線算法


false, 和 true就是常規(guī)掃描線算法里面的start, end object的屬性。

對(duì)于false的 也就是left point of a rectangle, 我們采用他的left x.

對(duì)于true的,也就是right point of a rectangle 我們采用他的right x。

Top和Bot 意思就是當(dāng)前見過的所有Rectangle 里的最高的地方,和最低的地方。

Time 他這里的意思是: 寬度, left 或者right。這是一個(gè)很容易錯(cuò)的地方!

很難理解的地方: RectLife里的compareTo.

意思是如果這個(gè)rectangle跟另一個(gè)Rectangle的width x值一樣的話,我們要比較一下他們的left x 的大小。因?yàn)槲覀冎氨容^的width一樣可能只是A的left跟B的right x一樣。我們要把靠近左邊的Rectangle優(yōu)先處理

如果這個(gè)rectangle跟另一個(gè)Rectangle的width x值不一樣的話。


我們有可能組成高度ok的東西,但是中間假設(shè)有一個(gè)gap就完蛋了。所以對(duì)于所有在一個(gè)x點(diǎn)的,我們判斷能不能達(dá)到一樣的高度。pq.peek().time == time...


PriorityQueue的排序順序是按x點(diǎn)time來比的,如果x點(diǎn)一樣,按照rect.l - that.rect.l也就是比x width。


TreeSet<> 用來裝Rect的object,如果以前看過一個(gè)一毛一樣的就不管了

跟掃描線一樣,碰到start 加入set,【可以認(rèn)為是一個(gè)stack】,碰到end remove (rl.rect).

recLife object有一個(gè)rect的object。可以通過他remove from stack.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,899評(píng)論 0 33
  • UIBezierPath Class Reference 譯:UIBezierPath類封裝了Core Graph...
    鋼鉄俠閱讀 1,942評(píng)論 0 3
  • 二維碼掃描最近兩年簡(jiǎn)直是風(fēng)靡移動(dòng)互聯(lián)網(wǎng)時(shí)代,尤其在國(guó)內(nèi)發(fā)展神速。圍繞條碼掃碼功能,首先說說通過本文你可以知道啥。一...
    55book閱讀 4,333評(píng)論 0 1
  • 今天的晨讀告訴我們?cè)趺刺嵘约旱乃伎剂Α?一張紙,橫放;一支筆。 曾經(jīng)有人說我的大腦空如白紙。事實(shí)上的確如此,跟別...
    houpanpan926閱讀 454評(píng)論 1 7
  • 一些該被原諒的無法被原諒 而困惑者被不斷搪塞 期翼者又在年邁中睡去 新生者在無知中冷漠 就這樣 沒有什么能激起村莊...
    年漠閱讀 177評(píng)論 0 2

友情鏈接更多精彩內(nèi)容