chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

Leetcode上第11號問題:盛最多水的容器

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:算法與數(shù)據(jù)結(jié)構(gòu) ? 2020-05-06 10:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Leetcode 上第 11 號問題:盛最多水的容器,是一道非常經(jīng)典的問題。不久前,一個同學(xué)還告訴我,他去字節(jié)跳動面試,考了一模一樣的原題。

這個問題本身很好理解:在坐標(biāo)軸的每個坐標(biāo)位置都放上了一系列長度不等的豎板。要求在這些豎板中選出兩塊,這兩塊豎板和坐標(biāo)軸組成了一個“容器”。這個容器的底就是這兩塊豎板所在的坐標(biāo)之間的距離;而高則是這兩塊豎板之間的較短者。所謂短板效應(yīng)。

問題是希望找到兩塊豎板,使得這個“容器”的面積最大。

如果總共有 n 塊木板可以選擇的話,我們可以暴力枚舉任意兩塊木板的組合,檢查他們組成的容器面積,一共需要檢查 n * (n - 1) / 2 對木板的組合。

如果會排列組合的同學(xué),可以很輕易地使用組合公式得到這個結(jié)果,即:

C(n, 2) = n * (n - 1) / 2

即使不擅長排列組合的同學(xué),也可以非常容易地通過程序來分析出這個結(jié)果。我們的暴力枚舉的程序偽碼是這樣的:(其中數(shù)組 a 存儲了 n 個木板的高度)

res=0; for(i=0;i

在上面的循環(huán)中,res 一共被比較計算了幾次?

可以想象,當(dāng) i == 0 的時候,j 的取值范圍是從 1 到 n-1,內(nèi)循環(huán)一共計算了 n-1 次;

當(dāng) i == 1 的時候,j 的取值范圍是從 2 到 n-1,內(nèi)循環(huán)一共計算了 n-2 次;

當(dāng) i == 2 的時候,j 的取值范圍是從 3 到 n-1,內(nèi)循環(huán)一共計算了 n-3 次;

以此類推...

i 最大取值為 n - 2,此時 j 的取值為 n-1,內(nèi)循環(huán)只計算了 1 次。

所以,整體,內(nèi)循環(huán)計算的次數(shù),就是 1 + 2 + 3 + ... + (n-3) + (n-2) + (n-1)。

這是一個等差數(shù)列求和,一共 n-1 項,首項為 1,末項為 n-1。帶入等差數(shù)列求和公式,就是 n * (n - 1) / 2。

很顯然,這樣暴力枚舉,我們的算法時間復(fù)雜度是 O(n^2) 級別的。

實際上,這個問題有 O(n) 級別的解法,也就是大名鼎鼎的雙指針解法,思路是這樣的:

首先,使用 left 和 right 兩個指針,分別指向最左邊的木板 a[0] 和最右邊的木板 a[n-1]。這樣,left 和 right 就構(gòu)成了一個容器。這個容器的面積,是我們的初始值。

下一步,我們只需要看 left 對應(yīng)的木板和 right 對應(yīng)的木板誰小,就好了。如果 left 更小,那么就 left ++,也就是下一步去檢查 a[1] 和 a[n - 1] 組成的容器是否更大?如果 right 更小,那么就 right --,也就是看 a[0] 和 a[n - 2] 組成的容器是否更大?這個過程以此類推,如果發(fā)現(xiàn)了更大的容器,就更新結(jié)果。

算法偽碼大概是這樣的:

l=0,r=n-1,res=0; while(l

可以看出來,這個過程,或者 left ++,或者 right --,木板之間的距離越來越小。直到 left 和 right 碰上,也就是兩塊木板重合了,容器的底為 0,此時,算法結(jié)束。

這個算法的復(fù)雜度是 O(n) 的。因為整個算法中,每一個木板都或者被 left 指針指過一次,或者被 right 指針指過一次,直到 left 和 right 匯合。

對應(yīng)的,res 一共被計算了 n-1 次。因為兩個木板才能形成一個容器。使用這種方式,n 個木板,一共組成了 n-1 個容器。

這個算法看起來非常簡單,但是,一個很致命的問題是:這個算法為什么是正確的?

一個直觀的想法是:每次不管是 left 右移,還是 right 左移,容器的底都會減一。由于容器的底減小了,所以,如果我們要想得到更大的面積,就要讓容器的高變大。整個容器的高是由最短的木板決定的,所以我們將兩個木板中最短的那一個做改變,才有可能得到一個更大的容器。

這個解釋模模糊糊說得通,但似乎并不是那么嚴(yán)格。關(guān)鍵在于,這個解釋沒有說明:這個算法為什么沒有漏掉一個可能的更大面積的容器?

Leetcode 的討論區(qū)有很多關(guān)于這個算法的正確性的討論,但我覺得大多數(shù)敘述的語言過于理論化了。也有同學(xué)在我的課程問答區(qū)問過我這個問題,所以,我寫了這篇文章,嘗試闡述一下這個問題。

我們來看初始的時候,left 指向 a[0],right 指向 a[n-1]。我們假設(shè) a[0] 是小于 a[n-1] 的,即 a[0] < a[n-1]。那么下一步,根據(jù)我們的算法,就是 left ++,即 left 下一步指向了 a[1]。

這意味著什么?這就意味著,使用 a[0] 和 a[n-2];使用 a[0] 和 a[n-3];使用 a[0] 和 a[n-4];.... ;使用 a[0] 和 a[1],這些木板的組合,我們都直接跳過去了,不去計算了。

換句話說,因為我們直接 left ++ 了,所以所有的以 a[0] 為左邊木板的其他組合,都不看了。

為什么可以這樣?

還記得我們的假設(shè)嗎?a[0] 是小于 a[n-1] 的。所以,此時,整個容器的高度,是由 a[0] 決定的。因為,如果右邊板的高度大于 a[0],我們?nèi)《贪?,容器的高度還是 a[0];如果右邊的高度小于 a[0],那么容器的高度比 a[0] 還要小。

而對于其他的以 a[0] 為左邊木板的組合:a[0] 和 a[1],a[0] 和 a[2],a[0] 和 a[3],...,a[0] 和 a[n-2],底的長度都比 a[0] 和 a[n-1] 更小。而高度又不會超過 a[0],所以,面積一定是更小的,我們就可以直接排除掉!

那么這個過程,我們一下子排除了多少組組合呢?答案是,左邊是 a[0],右邊是 a[1] ... a[n-2],一共 n-2 組組合,直接被我們?nèi)拥袅恕?/p>

當(dāng)然,如果我們假設(shè) a[0] > a[n-1],這個邏輯同樣成立,只不過我們?nèi)拥舻慕M合,右邊固定為 a[n-1],左邊是 a[1] 到 a[n-2],還是 n-2 個組合。

現(xiàn)在,假設(shè)我們的 left 指向 1 了,right 還是 n-1。再假設(shè),這次是 a[1] > a[n-1] 了。那么,按照我們的算法,就應(yīng)該是 right-- 了。

這次,有了上面的分析,相信大家就都理解了,我們不需要比較 a[2] 和 a[n-1];a[3] 和 a[n-1];a[4] 和 a[n-1];...;a[n-3] 和 a[n-1],a[n-2] 和 a[n-1],這些組合了。

為什么?因為此時,a[1] 和 a[n-1] 這個組合中,容器的高度是由右邊的板 a[n-1] 決定的。那么剩下的以 a[n-1] 為右側(cè)板的所有容器,高度不可能大于 a[n-1] 了,而底卻在縮小,所以,這些組合都可以直接扔掉,不計算了。

那么這次,我們?nèi)拥袅硕嗌賯€組合?答案是右邊固定為 a[n - 1],左邊是 a[2], a[3],...,a[n-2],一共 n-3 個組合!

相信大家可以看出規(guī)律來了。我們每次左指針或者右指針移動一次,其實都是扔掉了若干組合,不再需要比較了。

第一次移動,扔掉了 n-2 個組合;第二次移動,扔掉了 n-3 個組合;第三次移動,將扔掉 n-4 個組合,依次類推,直到最后一次移動,扔掉 1 個組合。

那么,我們在這個過程中,總共扔掉了多少組合?就是 1, 2, 3, ... , n-4, n-3, n-2 的和。大家可以看出來,這又是一個等差數(shù)列。首項是 1,末項是 n-2,一共 n-2 項。

帶入等差數(shù)列求和公式,我們一共扔掉了 (n-1)*(n-2)/2 這么多個組合,不用去考慮。

現(xiàn)在,大家就可以計算一下了?;貞浺幌律厦娴臄⑹觯?/p>

我們一共扔掉了 (n-1)*(n-2)/2 這么多組合,只計算了 n-1 這么多組合。

把他們加起來,是多少?

答案是 n * (n - 1) / 2!

大家回憶一下,這個數(shù)字正好就是 n 塊木板,抽出兩塊,組成容器的所有可能方案!

C(n, 2) = n * (n - 1) / 2!

那么這也就證明了,我們的雙指針?biāo)惴?,比較了 n-1 組木板,扔掉了 (n-1)*(n-2)/2 組木板,合在一起,已經(jīng)完整地考慮了所有 n * (n - 1) / 2 組木板的組合了。

我們這個過程,不會漏掉任何一個組合,最終找到的解,一定是最優(yōu)解!

怎么樣?是不是覺得這個證明理解起來并不難?

值得一提的是,雖然我們說這個問題是雙指針的問題,但其實,在算法設(shè)計上,我們使用了貪心的思想。即每次把最短木板對應(yīng)的所有其余組合都扔掉了。

而對于貪心算法來說,最大的特點就是:通常代碼都會比較簡單,但要想證明貪心的正確性,會比較費勁。這個問題就是一個很好的例子。

實際上,在 Leetcode 上,還有很多貪心的問題,擁有這樣的特點。以后有機會,可以再向大家介紹。

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

    關(guān)注

    23

    文章

    4777

    瀏覽量

    97698
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    525

    瀏覽量

    22906
  • leetcode
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    2528

原文標(biāo)題:優(yōu)雅地證明 盛水容器問題

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    聯(lián)德微電子旗下德創(chuàng)信投產(chǎn)儀式暨開業(yè)慶典隆重舉行

    2025年12月26日上午,德創(chuàng)信科技(瑞安)有限公司(以下簡稱“德創(chuàng)信”)投產(chǎn)暨開業(yè)慶典在溫州瑞安市汀田未來科創(chuàng)園隆重舉行。儀式現(xiàn)場氣氛熱烈,政企代表、股東嘉賓、合作伙伴及公司員工齊聚一堂,共同見證了這一重要時刻。
    的頭像 發(fā)表于 01-04 14:11 ?322次閱讀

    具有穿透性強、測量精度高的電容型、非接觸式感知的智能浸傳感器-WLD

    浸傳感器-WLD(Water Leak Detector)是一款電容型、非接觸式感知的智能浸傳感器。WLD浸傳感器采用了獨創(chuàng)的高頻差分式數(shù)字電容芯片MC11S,并結(jié)合了特有的電容
    的頭像 發(fā)表于 12-31 09:43 ?210次閱讀
    具有穿透性強、測量精度高的電容型、非接觸式感知的智能<b class='flag-5'>水</b>浸傳感器-WLD

    電子與華院計算達成戰(zhàn)略合作

    12月11日,深圳市航電子股份有限公司(以下簡稱“航”)與華院計算技術(shù)(上海)股份有限公司(以下簡稱“華院計算”)正式簽署戰(zhàn)略合作協(xié)議。華院計算創(chuàng)始人、董事長宣曉華,副總經(jīng)理魏峰,智能體事業(yè)部
    的頭像 發(fā)表于 12-16 17:08 ?616次閱讀

    昌創(chuàng)新解決方案推動能源裝備數(shù)智化升級

    2025 年 11 月 27 日,華昌(股票代碼:002980.SZ)宣布在工業(yè)數(shù)智化賽道邁出堅實的一步。華昌控股子公司——湖南華之鴻智能技術(shù)有限公司在長沙正式揭牌運營,華昌聯(lián)合
    的頭像 發(fā)表于 12-16 09:58 ?492次閱讀

    上海永銘電子誠邀您蒞臨深圳CPEEC*CPSSC展,共探高性能電容器創(chuàng)新應(yīng)用新未來

    上海永銘電子將于11月8日至9日精彩亮相深圳CPEEC*CPSSC展會,展位位于20館E16。屆時,永銘將集中展示在新能源汽車、AI服務(wù)器、光伏儲能、電機驅(qū)動(機器人/無人機/伺服驅(qū)動)等關(guān)鍵領(lǐng)域
    的頭像 發(fā)表于 11-07 13:48 ?583次閱讀
    上海永銘電子誠邀您蒞臨深圳CPEEC*CPSSC展,共探高性能電<b class='flag-5'>容器</b>創(chuàng)新應(yīng)用新未來

    昌DeepSense深度感測大模型通過生成式人工智能服務(wù)備案

    近日,深圳市華昌科技實業(yè)股份有限公司(以下簡稱“華昌”)的“DeepSense深度感測大模型”在歷經(jīng)屬地網(wǎng)信辦初審、中央網(wǎng)信辦終審及六大部委意見征詢后,通過廣東省生成式人工智能服務(wù)備案(備案
    的頭像 發(fā)表于 09-08 14:49 ?1732次閱讀

    季豐電子與劍科技達成戰(zhàn)略合作

    8月29日,在劍科技成立20周年慶?;顒由希矩S電子與劍科技舉行了正式的戰(zhàn)略合作簽約儀式。
    的頭像 發(fā)表于 09-01 18:08 ?1129次閱讀

    智能入選2025中國創(chuàng)新品牌500強

    8月8-11日,第十九屆中國品牌節(jié)在深圳順利召開,同期,“2025中國創(chuàng)新品牌500強”榜單發(fā)布。芯智能科技(湖南)有限公司(以下簡稱“芯智能”)憑借在存儲領(lǐng)域的自主創(chuàng)新實力和市場表現(xiàn),成功入圍2025中國創(chuàng)新品牌500強。
    的頭像 發(fā)表于 08-12 15:55 ?1884次閱讀

    英飛特點亮廣州地鐵11

    隨著廣州地鐵11線正式通車,這條覆蓋33座車站、全長超43公里的華南最長地鐵環(huán)線全面投入運營。
    的頭像 發(fā)表于 07-22 14:40 ?860次閱讀

    集團2025年數(shù)字化建設(shè)項目正式啟動

    為統(tǒng)一戰(zhàn)略認(rèn)知、凝聚執(zhí)行合力,近日,航2025年數(shù)字化建設(shè)項目啟動會在深圳總部順利召開。航高層領(lǐng)導(dǎo)及項目團隊成員出席本次活動。會議標(biāo)志著航集團2025年數(shù)字化建設(shè)項目正式啟動。
    的頭像 發(fā)表于 07-18 10:20 ?914次閱讀

    昌亮相2025亞歐商博會

    此前,6月26日至30日,2025(中國)亞歐商品貿(mào)易博覽會(以下簡稱“商博會”)在烏魯木齊隆重舉行。華昌(展位:J21)攜旗下專為新型電力系統(tǒng)和新能源產(chǎn)業(yè)鏈量身打造的專業(yè)測試測量儀器與解決方案亮相。
    的頭像 發(fā)表于 07-07 17:41 ?750次閱讀

    昌精彩亮相SNEC 2025

    此前,6月11日-13日,第十八屆國際(2025)太陽能光伏與智慧能源大會暨展覽會在上海國家會展中心舉行。華昌攜旗下專為新能源領(lǐng)域打造的專業(yè)測試測量儀器和專業(yè)配套解決方案亮相4.1H-B515展位,全力賦能行業(yè)伙伴加速邁向智能、可持續(xù)的未來能源體系。
    的頭像 發(fā)表于 06-23 18:01 ?1086次閱讀

    查看an70707文檔,為什么它的指導(dǎo)電源電容器使用0.01uf和0.1uf的電容器?

    (C11) 0.01 μF 和 0.1 μF 閱讀指南文檔后,我認(rèn)為一定有一些重要的原因,但是當(dāng)我查看SuperSpeed_Explorer_Kit的bom文件時,它使用了公差為10%的電容器。 從我的角度來看,使用兩個電容器
    發(fā)表于 05-14 08:26

    凝膠拉伸試驗機:材料性能的洞察者

    凝膠,作為一種神奇的親水性聚合物材料,能吸收大量水分,呈現(xiàn)出柔軟、透明且富有彈性的凝膠狀。因其獨特性能,在生物醫(yī)學(xué)、組織工程、藥物輸送、柔性電子等諸多前沿領(lǐng)域展現(xiàn)出巨大應(yīng)用潛力。而深入探究凝膠
    的頭像 發(fā)表于 04-28 10:37 ?524次閱讀
    <b class='flag-5'>水</b>凝膠拉伸試驗機:材料性能的洞察者

    【重磅喜訊】再獲國家認(rèn)可!賽檢測通過CNAS復(fù)評審

    (CNAS)委托評審專家現(xiàn)場評審,賽檢測現(xiàn)有的127個檢測標(biāo)準(zhǔn)(方法),全部通過復(fù)評評審,還推薦了申請變更的11個(其中,電磁兼容7個,可靠性4個)檢測標(biāo)準(zhǔn)(方法
    的頭像 發(fā)表于 03-21 17:40 ?883次閱讀
    【重磅喜訊】再獲國家認(rèn)可!賽<b class='flag-5'>盛</b>檢測通過CNAS復(fù)評審