雙指針系列第 8 篇:盛水最多的容器。幾句話講明白!

在這里插入圖片描述

Leetcode 題目鏈接

思路

取首尾雙指針和水量如下所示,設高度函數為 h ( i ) h(i) h(i),在下圖中 h ( l ) < h ( r ) h(l) < h(r) h(l)<h(r)
Screenshot 2024-07-03 at 6.30.09 PM.png

觀察以 l l l 為左邊界所能構成的其他水量,與矮的右邊界搭配結果如下。
Screenshot 2024-07-03 at 6.30.13 PM.png

與高的右邊界搭配結果如下。
Screenshot 2024-07-03 at 6.30.15 PM.png

我們可以發現水量都會變小,即無法通過當前 l l l 獲得更大的水量,可在記錄水量后舍棄 l l l,使其右移。

如果初始 h ( l ) > h ( r ) h(l) > h(r) h(l)>h(r), 則鏡像處理,令 r r r左移。

如果初始 h ( l ) = h ( r ) h(l) = h(r) h(l)=h(r),任意移動均可。

此后循環分析這個過程并移動指針即可。

嚴謹證明

假設初始 h ( l ) < h ( r ) h(l) < h(r) h(l)<h(r),當前可容納的水量記為 c = ( r ? l ) × h ( l ) c = (r - l) \times h(l) c=(r?l)×h(l)

? i ∈ ( l , r ) \forall i \in (l, r) ?i(l,r) i i i l l l 作為邊界對應的可容納水量記為 c ′ = ( i ? l ) × m i n { h ( i ) , h ( l ) } c' = (i - l) \times min\{h(i),\ h(l)\} c=(i?l)×min{h(i),?h(l)},其中:

  • i ? l < r ? l i - l < r - l i?l<r?l
  • m i n { h ( i ) , h ( l ) } ≤ h ( l ) min\{h(i),\ h(l)\} \leq h(l) min{h(i),?h(l)}h(l)

c ′ < c c' < c c<c,可在記錄水量后舍棄 l l l,令 l l l 右移,因為無法通過 l l l 獲得更大的水量。

余下分析同上。

代碼

僅提供 java 代碼。

class Solution {public int maxArea(int[] height) {int l = 0;int r = height.length - 1;int maxCap = 0; // 待返回的最大水量while (l < r) {int cap = (r - l) * Math.min(height[l], height[r]);maxCap = Math.max(maxCap, cap);if (height[l] < height[r]) {l++;} else {r--;}}return maxCap;}
}

復雜度

時間: Θ ( n ) \Theta(n) Θ(n)
空間: Θ ( 1 ) \Theta(1) Θ(1)

推廣

以下皆為個人所著,兼顧了職場面試和本碩階段的學術考試。

  • 附個人題解的雙指針題單
  • 圖論入門
  • 圖論進階

點贊關注不迷路,祝各位早日上岸,飛黃騰達!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38946.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38946.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38946.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jdk17卸載后換jdk1.8遇到的問題

過程&#xff1a; 1、找到jdk17所在文件夾&#xff0c;將文件夾進行刪除。&#xff08;問題就源于此&#xff0c;因為沒刪干凈&#xff09; 2、正常下載jdk1.8&#xff0c;按照網上步驟配置環境變量&#xff0c;這里我參考的文章是&#xff1a; http://t.csdnimg.cn/Svblk …

【RT摩拳擦掌】如何構建RT AVB switchendpoint平臺

【RT摩拳擦掌】如何構建RT AVB switch&endpoint平臺 一&#xff0c;文檔簡介二&#xff0c;平臺構建2.1 軟硬件情況2.2 配置RT1170 AVB端點2.2.1 1塊MIMXRT1170開發板做talker配置2.2.2 2塊MIMXRT1170開發板做listener配置 2.3 AVB Switch 配置2.3.1 MOTU AVB Switch2.3.2 …

未來的鑰匙在于過去:學歷史的真正意義,震驚!歷史竟然是偶然的?從歷史中尋找未來的方向!

我們自幼接受的教育是&#xff0c;學歷史是為了相信歷史是必然的。中國人民必然戰勝日寇的侵略&#xff0c;解放思想和改革開放必定會發生&#xff0c;和平和發展必定是世界的主題&#xff0c;中國經濟必定是高速增長…… 然而&#xff0c;在真正的歷史學家眼中&#xff0c;歷史…

linux應用開發基礎知識(八)——內存共享(mmap和system V)

mmap內存映射 內存共享定義 內存映射&#xff0c;簡而言之就是將用戶空間的一段內存區域映射到內核空間&#xff0c;映射成功后&#xff0c;用戶對這段內存區域的修改可以直接反映到內核空間&#xff0c;同樣&#xff0c;內核空間對這段區域的修改也直接反映用戶空間。那么對…

海外注冊 | 歐盟醫療器械法規下免除臨床試驗的條件與要求

在歐盟醫療器械法規&#xff08;MDR&#xff09;的嚴格監管下&#xff0c;植入性醫療器械和III類醫療器械通常需要進行臨床試驗來證明其安全性和性能。 然而&#xff0c;MDR也規定了一些特定情況下免除臨床試驗的可能性。以下是免除臨床試驗的條件和要求的詳細說明&#xff1a…

MVC(Model-View-Controller)模式

MVC&#xff08;Model-View-Controller&#xff09;模式三個主要組件&#xff1a;模型&#xff08;Model&#xff09;&#xff0c;視圖&#xff08;View&#xff09;&#xff0c;和控制器&#xff08;Controller&#xff09;&#xff1a; 模型&#xff08;Model&#xff09;&a…

【高中數學/基本不等式】已知:a,b皆為正數,且1/(2a+b)+1/(a+2b)=1 求:a+b的最小值?

【問題來源】 https://www.ixigua.com/7025123539728466469?logTag1c2fd2e305d60e6277ab 第二題 【問題】 已知&#xff1a;a,b皆為正數&#xff0c;且1/(2ab)1/(a2b)1 求&#xff1a;ab的最小值&#xff1f; 【解答】 解&#xff1a;此題也有分母難消的問題&#xff…

人口萎縮,韓國釜山“進入消失階段”

KlipC報道&#xff1a;調查顯示&#xff0c;隨著低生育率和人口老化&#xff0c;釜山人口逐漸萎縮&#xff0c;韓國第二大城市釜山顯現出“進入消失階段”的跡象。 據悉&#xff0c;“消失風險指數”是將20歲至39歲女性人口總數除以65歲及以上人口得到的數值。當該指數大于1.5…

自然語言處理學習(2)基本知識 文本預處理+文本數據分析+文本增強

conda activate DL conda deactivate課程鏈接 一 一些包的安裝 1 stanfordcorenlp 在anoconda prompt 里面&#xff1a;進入自己的conda環境&#xff0c;pip install stanfordcorenlp 進入方式 相關包下載&#xff0c;Jar包我沒有下載下來&#xff0c;太慢了&#xff0c;這個…

記錄Atlas800服務器環境安裝

一、創建安裝賬號 groupadd HwHiAiUser useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash二、下載依賴包 以下包根據需求自行下載 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_24.5.0-0-Linux-aarch64.sh wg…

debug-mmlab

mmyolo bug1: MMYOLO for yolov5 instance segmentation on balloon dataset getting this error "ValueError: Key img_path is not in available keys. solution: pip install albumentations1.3.1 reference

【計算機考研】408王道四本書的正確使用順序

個人認為如果對408的分數要求不太高&#xff0c;120分以下跟著王道就夠了&#xff0c;而120分以上還需要看一下教材。 王道的書很適合應試考試&#xff0c;書中的內容都是抓重點&#xff0c;咸魚老師上課講的內容也非常好&#xff0c;通俗易懂&#xff0c;計算機網絡要稍遜一些…

實現Linux C++進程意外退出時信號處理與堆棧打印

文章目錄 0. 引言1. 獲取堆棧信息流程圖2. 實現進程守護與信號處理2.1 進程如何守護化&#xff1f;2.2 信號處理hook函數注冊2.3 守護進程代碼熟宣 3. 堆棧信息捕獲與打印邏輯4. 其他說明5. 附錄完整代碼 0. 引言 在軟件開發中&#xff0c;特別是對于需要高可靠性的后臺服務或…

掌握Go語言郵件發送:net/smtp實用教程與最佳實踐

掌握Go語言郵件發送&#xff1a;net/smtp實用教程與最佳實踐 概述基本配置與初始化導入net/smtp包設置SMTP服務器基本信息創建SMTP客戶端實例身份驗證 發送簡單文本郵件配置發件人信息構建郵件頭部信息編寫郵件正文使用SendMail方法發送郵件示例代碼 發送帶附件的郵件郵件多部分…

大模型知識學習

大模型訓練過程 數據清洗 擬人化描述&#xff1a;知識庫整理 預訓練 擬人化描述&#xff1a;知識學習可以使用基于BERT預訓練模型進行訓練 指令微調 擬人化描述&#xff1a;實際工作技能學習實際操作&#xff1a;讓大模型模仿具體的輸入輸出進行擬合&#xff0c;即模仿學…

Study--Oracle-06-Oracler網絡管理

一、ORACLE的監聽管理 1、ORACLE網絡監聽配置文件 cd /u01/app/oracle/product/12.2.0/db_1/network/admin 2、在Oracle數據庫中&#xff0c;監聽器&#xff08;Listener&#xff09;是一個獨立的進程&#xff0c;它監聽數據庫服務器上的特定端口上的網絡連接請求&#xff0c…

Vitis AI - 量化流程詳解

目錄 1. 簡介 2. 具體流程 2.1 校準激活 2.2 量化感知訓練 2.3 量化校準配置 2.4 quantization 函數 3. 總結 1. 簡介 想象一下&#xff0c;你有一個非常聰明的機器人朋友&#xff0c;它可以幫你做很多事情&#xff0c;比如預測天氣。但是&#xff0c;這個機器人的大腦…

01 數據采集層 流量分發第一步規范采集海量數據

《易經》&#xff1a;“初九&#xff1a;潛龍勿用”。潛龍的意思是隱藏&#xff0c;陽氣潛藏&#xff0c;陽爻位于最下方稱為“初九”&#xff0c;龍潛于淵&#xff0c;是學而未成的階段&#xff0c;此時需要打好基礎。 而模塊一我們就是講解推薦系統有關的概念、基礎數據體系…

基于SpringBoot+Vue商戶點評管理與數據分析系統設計和實現(源碼+LW+調試文檔+講解等)

&#x1f497;博主介紹&#xff1a;?全網粉絲10W,CSDN作者、博客專家、全棧領域優質創作者&#xff0c;博客之星、平臺優質作者、專注于Java、小程序技術領域和畢業項目實戰?&#x1f497; Java精品實戰案例《1000套》 2025-2026年最值得選擇的Java畢業設計選題大全&#xff…

使用 Vanna 生成準確的 SQL 查詢:工作原理和性能分析

Vanna工作原理 從本質上講,Vanna 是一個 Python 包,它使用檢索增強功能來幫助您使用 LLM 為數據庫生成準確的 SQL 查詢。 Vanna 的工作分為兩個簡單的步驟 - 在您的數據上訓練 RAG“模型”,然后提出問題,這些問題將返回可設置為在您的數據庫上自動運行的 SQL 查詢。 vn.t…