LeetCode算法(和中等打的有來有回)——盛最多水的容器

文章目錄

    • leetcode第11題:盛最多水的容器
      • 二次循環
        • 代碼
      • 雙指針優化
        • 解析
        • 代碼

leetcode第11題:盛最多水的容器

在這里插入圖片描述

二次循環

這道題比較容易想到的就是通過二次循環遍歷所有能盛的水的體積。

代碼
class Solution {public int maxArea(int[] height) {// 記錄最大體積int max = 0;// 左側for(int i=0;i<height.length;i++){// 右側for(int j =i+1;j<height.length;j++){// 計算體積int volumn = (j-i)*Math.min(height[i],height[j]);// 比較體積與當前最大值if(volumn>max)max = volumn;}    }return max;}
}

但是很明顯,當前這種方案的時間復雜度為O(n*n),會在提交時超出時間限制。

雙指針優化

解析

那么嘗試進行優化,尋找這種情形下有沒有什么特點可以被發現。

這里可以觀察體積計算的公式
v = height*width
(其中width=right-left; height=min(heights[right],heights[left]))的特性。

假設我們通過雙指針從height數組左右兩側依次向中間夾,那么width就會一直減小。而此時,我們只有讓水桶的木板變高才會讓容器的體積增大(一個變量始終減小或者增大,只需要考慮另一個變量就可以)
因此在移動過程中,如果移動較高的那么體積必然減小,只有移動較低的才會可能讓體積增大(決定木桶體積的是最短板,而不是最長板)
我們在遍歷的過程中不斷移動較短的部分,即:

if(height[left]>height[right]){right--;
}else{left++;
}

同時不斷計算當前移動后是不是大于記錄的最大容量,如果大于那么更新最大容量。

int volumn = Math.min(height[right],height[left])*(right-left);
if(volumn>max)max = volumn;

因此本道題目關鍵:

1.決定木桶體積的是最短板,而不是最長板
2.兩個變量計算的時候,如果控制其中一個始終減小或者增加,那么只需要關注另一個變量就可以
3.如果兩個變量增加減小無法控制,那么時間復雜度只能提高。

代碼
class Solution {public int maxArea(int[] height) {if(height.length==1)return 0;int left = 0;int right = height.length-1;int max = Math.min(height[left],height[right])*(right-left);// 左右依次遍歷// 移動較小的那根while(left<right){if(height[left]>height[right]){right--;}else{left++;}int volumn = Math.min(height[right],height[left])*(right-left);if(volumn>max)max = volumn;}return max;}
}

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

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

相關文章

Karmada 多集群服務發現

一、背景介紹 多集群架構下&#xff0c;不同 Kubernetes 集群間的服務如何互通是核心挑戰。Karmada 支持 Kubernetes Multi?cluster Service APIs&#xff08;MCS&#xff09;&#xff0c;通過 ServiceExport 和 ServiceImport 實現跨集群服務發現與調用&#xff0c;幫助多集…

macOS 26正式發布,全新Liquid Glass設計語言亮相

在全球科技愛好者翹首以盼的WWDC 2025開發者大會上&#xff0c;蘋果公司正式揭開了macOS 26系統的神秘面紗。此次系統更新最令人矚目的&#xff0c;當屬其采用的全新Liquid Glass設計語言&#xff0c;該設計不僅重塑了Mac的視覺風格&#xff0c;更為用戶帶來了一場前所未有的操…

網絡基礎(3)

網絡基礎&#xff08;3&#xff09; 有關進程 1&#xff09;進程是人在系統中的代表&#xff0c;只要把數據給進程&#xff0c;人就相當于拿到了數據 2&#xff09;數據傳輸到主機不是目的&#xff0c;而是手段。到達主機內部&#xff0c;再交給主機內的進程才是目的 上網的…

C語言專題:17.邏輯運算與三目運算符(按位邏輯運算、條件運算符)

? C語言中的邏輯運算符和三目運算符&#xff08;條件運算符&#xff09;是非常常見且基礎的操作符&#xff0c;它們分別用于布爾邏輯運算和簡化條件判斷的表達式。通過合理使用這些運算符&#xff0c;可以使代碼更加簡潔、清晰。本文將重點介紹邏輯運算符、三目運算符和按位邏…

【分布式 ID】一文詳解美團 Leaf

文章目錄 1. 前言2. 項目啟動示例 - MYSQL 和 Zookeepr2.1 Leaf-segment 模式2.2 Leaf-snowflake 模式 - 單節點2.3 Leaf-snowflake 模式 - 多節點 3. Leaf-segment 詳細講解4. Leaf-segment 源碼解析4.1 SegmentBuffer 號段緩存4.2 Segment 號段4.3 初始化號段服務 SegmentIDG…

互聯網大廠Java面試實錄:Spring Boot與微服務在電商場景中的應用

互聯網大廠Java面試實錄&#xff1a;Spring Boot與微服務在電商場景中的應用 面試場景 面試官&#xff1a;你好&#xff0c;謝飛機&#xff0c;歡迎參加我們的Java開發崗位面試。首先&#xff0c;能否簡單介紹一下你的技術背景&#xff1f; 謝飛機&#xff1a;嗨&#xff0c…

XILINX Ultrascale+ Kintex系列FPGA的架構

Xilinx&#xff08;現為AMD&#xff09;Kintex UltraScale系列FPGA是基于16nm FinFET工藝的高性能、中等成本的現場可編程門陣列&#xff0c;專為高帶寬、低功耗和成本效益的應用設計&#xff0c;廣泛用于5G通信、數據中心、視頻處理、航空航天等領域。以下詳細介紹Kintex Ultr…

騰訊云實名資質 “待補充后提交” 解決方法

目錄 一、引言二、為什么會出現 “待補充后提交” 狀態三、需要補充的具體材料3.1 營業執照3.2 法人身份證相關3.3 短信管理員資料3.4 合規使用承諾函 四、處理流程詳細步驟4.1 登錄騰訊云控制臺4.2 進入實名資質相關頁面4.3 上傳補充材料4.4 提交審核 五、注意事項5.1 材料規范…

8分鐘講完 Tomcat架構及工作原理

https://www.bilibili.com/video/BV1J3411k7Xc/?spm_id_from333.337.search-card.all.click&vd_source36145f3620bdf21c0f1a843352e603fb JavaWeb開發必看&#xff01;Tomcat架構及工作原理&#xff08;8分鐘&#xff09; 分闡明了Tomcat的工作原理。 一、Tomcat的核心架…

C盤爆滿元兇!WinSxS組件解密

C盤爆滿元兇!WinSxS組件解密 WinSxS是什么?核心功能與重要性目錄為何瘋狂膨脹?安全清理權威指南優先使用微軟官方工具:DISM工具清理效果與性能影響重要風險提示總結C盤爆滿元兇!WinSxS組件解密你是否也遇到過: C盤空間頻頻告急,檢查發現WinSxS文件夾竟獨占數十GB空間?想…

畢業設計(啟智模塊化機器人的組裝與K5的使用

記錄一下 畢業設計的部分筆記 準備清空文件發到csdn做一個紀念0.0 物聯網畢業設計 機器的組裝與K5的使用 基礎文件的學習 首先安裝K5 和文件包中的JLink驅動 并且文件實例里的代碼必須加上x后綴否則 只能用K4 來打開 供電&#xff1a;整個系統都需要電池運轉 build 存放…

從0開始學習R語言--Day37--CMH檢驗

對于有多個特征的數據&#xff0c;我們一般的處理方式是構建特征函數&#xff0c;計算每個特征向量的系數&#xff0c;從而將其影響納入到研究量中&#xff0c;但對于簡單的問題&#xff0c;也這樣做的話未免有點小題大做。這時我們可以考慮用CMH來分析變量在每個特征下的影響&…

搜索選擇DFS還是BFS

1. DFS&#xff08;深度優先搜索&#xff09;&#xff1a;優先進行深度縱向搜索&#xff0c;DFS所需的內存少于BFS所需的內存&#xff0c;利用堆棧實現&#xff0c;適合找最短路徑。 2. BFS&#xff08;廣度優先搜索&#xff09;&#xff1a;優先進行廣度橫向搜索&#xff0c;…

三格電子——電力協議轉換器

Modbus 轉 IE104 網關型號 SG-TCP-IEC104 &#xff0c;是三格電子推出的工業級網關&#xff08;以下簡稱網 關&#xff09;&#xff0c;主要用于 Modbus RTU/TCP/ASCII 數據采集、 DLT645-1997/2007 數據采集&#xff0c;可接多功 能電力儀表、溫控儀、電表等&#xf…

UE5 瞄準偏移(AimOffset)功能詳解

什么是AimOffset? AimOffset(瞄準偏移)是一種特殊的動畫混合空間(類似于 Blend Space),它通過將多個預設姿勢疊加到一個基礎動作上,實現角色根據視角方向進行上下左右的動畫混合。簡單來說,AimOffset 在射擊游戲中常用來處理角色持槍瞄準時的動作,比如抬頭、低頭、左…

在Ubuntu24上安裝ollama

安裝ollama之前&#xff0c;建議檢查顯卡驅動是否安裝完成。如果還未安裝顯卡驅動&#xff0c;建議先安裝顯卡驅動再安裝ollama。 安裝curl sudo apt update sudo apt -y install curl進入ollama的下載網站 https://ollama.com/download/linux 復制安裝腳本&#xff0c;并在…

【Kafka使用方式以及原理】

Kafka生產者發送消息的方式 Kafka生產者發送消息主要通過以下三種方式&#xff1a; 同步發送 生產者發送消息后&#xff0c;會阻塞等待Broker的響應&#xff0c;確認消息是否成功寫入。這種方式可靠性高&#xff0c;但吞吐量較低。代碼示例&#xff1a; ProducerRecord<S…

【ChatTTS】ChatTTS使用體驗

ChatTTS 使用體驗&#xff1a;初始使用真的十分驚艷。可以嘗試官網調用試一試。部署的好處是&#xff0c;遇到好聽的音色可以把參數自動存儲在本地。 苦惱&#xff1a;相同參數生成的音色不一致&#xff0c;需要多次調整&#xff0c;但最終效果非常滿意。 ? GitHub Star數變化…

華為云Flexus+DeepSeek征文| 基于華為云Dify-LLM高可用平臺開發運維故障處理智能體

華為云FlexusDeepSeek征文&#xff5c; 基于華為云Dify-LLM高可用平臺開發運維故障處理智能體 1. 概述2. 創建工作流2.1. 創建開始節點2.2. 創建搜索節點2.3. 創建LLM大模型節點2.4. 創建結束節點 3. 測試工作流4. 應用發布5. 總結 1. 概述 Dify是一款開源的LLM應用開發平臺&am…

vue中scss下載方式與引入方式

1. scss下載 npm install sass-loader --save-devnpm install node-sass --save-dev 2. 在style標簽里面加入lang“scss” 測試下&#xff01;