每日OJ題_算法_雙指針_力扣11. 盛最多水的容器

力扣11. 盛最多水的容器

11. 盛最多水的容器 - 力扣(LeetCode)

難度 中等

給定一個長度為?n?的整數數組?height?。有?n?條垂線,第?i?條線的兩個端點是?(i, 0)?和?(i, height[i])?。

找出其中的兩條線,使得它們與?x?軸共同構成的容器可以容納最多的水。

返回容器可以儲存的最大水量。

說明:你不能傾斜容器。

示例 1:

?

輸入:[1,8,6,2,5,4,8,3,7]
輸出:49 
解釋:圖中垂直線代表輸入數組 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍色部分)的最大值為?49。

示例 2:

輸入:height = [1,1]
輸出:1

提示:

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 10^4
class Solution {
public:int maxArea(vector<int>& height) {}
};

解析代碼

首先想到的是兩層循環的暴力解法,時間復雜度是O(N^2),這里采用雙指針(對撞指針)的思想優化到O(N):

設兩個指針 left , right 分別指向容器的左右兩個端點,此時容器的容積 :
v = (right - left) * min( height[right], height[left])?
容器的左邊界為 height[left] ,右邊界為 height[right] 。
為了方便敘述,假設「左邊邊界」小于「右邊邊界」。

  • 容器的寬度一定變小。
  • 由于左邊界較小,決定了水的高度。如果改變左邊界,新的水面高度不確定,但是一定不會超過右邊的柱子高度,因此容器的容積可能會增大。
  • 如果改變右邊界,無論右邊界移動到哪里,新的水面的高度一定不會超過左邊界,也就是不會超過現在的水面高度,但是由于容器的寬度減小,因此容器的容積一定會變小。

由此可見,左邊界和其余邊界的組合情況都可以舍去。所以可以left++跳過這個邊界,繼續去判斷下一個左右邊界。

不斷重復上述過程,每次都可以舍去大量不必要的枚舉過程,直到left與right相遇。期間產生的所有的容積里面的最大值,就是最終答案。

代碼:

class Solution {
public:int maxArea(vector<int>& height) {int left = 0, right = height.size() - 1, ret = 0;while(left < right){int v = (right - left) * min(height[left], height[right]);ret = max(v, ret);if(height[left] < height[right]) // 哪個小哪個就往中間移動{++left;}else{--right;}}return ret;}
};

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

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

相關文章

2023 最新 PDF.js 在 Vue3 中的使用

因為自己寫業務要定制各種 pdf 預覽情況&#xff08;可能&#xff09;&#xff0c;所以采用了 pdf.js 而不是各種第三方封裝庫&#xff0c;主要還是為了更好的自由度。 一、PDF.js 介紹 官方地址 中文文檔 PDF.js 是一個使用 HTML5 構建的便攜式文檔格式查看器。 pdf.js 是社區…

人工智能教程(二):人工智能的歷史以及再探矩陣

目錄 前言 更多矩陣的知識 Pandas 矩陣的秩 前言 在上一章中&#xff0c;我們討論了人工智能、機器學習、深度學習、數據科學等領域的關聯和區別。我們還就整個系列將使用的編程語言、工具等做出了一些艱難的選擇。最后&#xff0c;我們還介紹了一點矩陣的知識。在本文中&am…

vue打包上傳服務器的總結筆記

經歷了3個小時教訓&#xff0c;還是自己總結一下吧&#xff0c;致未來傻x的自己。 第一步&#xff0c;打開b站。搜索【vue打包】找到一個視頻教程 前端Vue項目打包部署實戰教程_嗶哩嗶哩_bilibili 這步是在看不懂下面操作的情況下用的 第一步&#xff1a;找到nginx的配置文件…

需求變更導致估算不精準 6大措施

需求變更可能導致估算不精準、項目成本增加、進度延遲等問題&#xff0c;如果不能準確地估算項目&#xff0c;往往會造成資源浪費和開發效率的降低&#xff0c;因此亟需解決因需求變更導致地估算不精準的問題。 一般來說&#xff0c;主要是從以下6個方面入手解決&#xff1a; 1…

【maven】【IDEA】idea中使用maven編譯項目,報錯java: 錯誤: 找不到符號 【2】

idea中使用maven編譯項目,報錯java: 錯誤: 找不到符號 錯誤狀況展示: 如果報這種錯,是因為項目中真的找不到報錯的方法或者枚舉 字段之類的,但實際是 : 點擊 File Path

OSG粒子系統與陰影-霧效模擬(1)

虛擬現實中有很多效果&#xff0c;如雨效、雪效、霧效等&#xff0c;這些都可以通過粒子系統來實現。一個真實的粒子系統的模式能使三維場景達到更好的效果。 本章對OSG粒子系統的使用以及生成自定義粒子系統的方法進行了詳細介紹最后還附帶說明了陰影的使用方法。在實時的場景…

(HAL庫版)freeRTOS移植STMF103

正點原子關于freeRTOS的教程是比較好的&#xff0c;可惜移植的是標準庫&#xff0c;但是我學的是Hal庫&#xff0c;因為開發速度更快&#xff0c;從最后那個修改SYSTEM文件夾的地方開始替換為下面的內容就可以了 5.修改Systick中斷、SVC中斷、PendSV中斷 將SVC中斷、P…

pairplot

Python可視化 | Seaborn5分鐘入門(七)——pairplot - 知乎 (zhihu.com) Seaborn是基于matplotlib的Python可視化庫。它提供了一個高級界面來繪制有吸引力的統計圖形。Seaborn其實是在matplotlib的基礎上進行了更高級的API封裝&#xff0c;從而使得作圖更加容易&#xff0c;不需…

紅黑樹詳解

紅黑樹的概念與性質 前置知識 在學習紅黑樹之前&#xff0c;最好有二叉查找樹和AVL樹的基礎&#xff0c;因為紅黑樹本質就是一種特殊的二叉查找樹&#xff0c;而紅黑樹的操作中需要用到AVL樹中旋轉的相關知識。至于二叉查找樹和AVL樹&#xff0c;可以參考如下兩篇博客&#xf…

oracle安裝的肘腋之疾小合集

#臨時空間指定 export TMP/tmp export TMPDIR/tmp #圖形化顯示框不全 java問題&#xff0c;使用系統自帶的jre ./runInstaller -jreLoc/usr/local/jdk1.7.0_80/ #ins30131 Failed to access the temporary location 給/tmp/CVU*加x權限 #linux桌面太小 xrandr -s 1440x900_60…

Matplotlib圖形注釋_Python數據分析與可視化

Matplotlib圖形注釋 添加注釋文字、坐標變換 有的時候單單使用圖形無法完整清晰的表達我們的信息&#xff0c;我們還需要進行文字進行注釋&#xff0c;所以matplotlib提供了文字、箭頭等注釋可以突出圖形中重點信息。 添加注釋 為了使我們的可視化圖形讓人更加容易理解&#…

vue中父組件直接調用子組件方法

vue2 中&#xff0c;父組件如何調用子組件的方法 在Vue 2中&#xff0c;父組件可以通過使用ref屬性來引用子組件的實例&#xff0c;然后通過該實例調用子組件的方法。 首先&#xff0c;在父組件的模板中&#xff0c;給子組件添加一個ref屬性&#xff1a; <template>&l…

在工業生產環境下,服務器沒有互聯網,如何通過代理自己的電腦上互聯網?

服務器主機是CentOS7操作系統.&#xff0c;服務器的局域網是10.0.6.x網段。我的筆記本的以太網口的局域網ip是也是10.0.6.x&#xff0c;由于這個10.0.6.x的整個局域網是沒有撥號上網的所有無法訪問互聯網。 但是&#xff0c;如果筆記本臉上wifi&#xff0c;wifi的網段是192.168…

長度最小的子數組

給定一個含有 n 個正整數的數組和一個正整數 target 。 找出該數組中滿足其總和大于等于 target 的長度最小的 連續子數組 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其長度。如果不存在符合條件的子數組&#xff0c;返回 0 。 示例 1&#xff1a; 輸入&#x…

MySQL 有多個普通索引時會取哪一個索引?

我們都知道MySQL在查詢時底層會進行索引的優化&#xff0c;假設有兩個普通索引&#xff0c;且where 后面也根據這兩個普通索引查詢數據&#xff0c;那么執行查詢語句時會使用到那個索引&#xff1f; 為了方便演示&#xff0c;新建users表&#xff0c;新建idx_name、idx_city這兩…

前端vue導出PPT,使用pptxgen.js

前言 公司新需求需要導出ppt給業務用&#xff0c;查閱資料后發現也挺簡單的&#xff0c;記錄一下。 如有不懂的可以留言&#xff01;&#xff01;&#xff01; 1.安裝包 npm install pptxgenjs --save2.引入包 在需要使用的文件中引入 import Pptxgenfrom "pptxgenjs&…

Oracle研學-介紹及安裝

一 ORACLE數據庫特點: 支持多用戶&#xff0c;大事務量的事務處理數據安全性和完整性控制支持分布式數據處理可移植性(跨平臺&#xff0c;linux轉Windows) 二 ORACLE體系結構 數據庫&#xff1a;oracle是一個全局數據庫&#xff0c;一個數據庫可以有多個實例&#xff0c;每個…

nodejs+vue+python+PHP+微信小程序-留學信息查詢系統的設計與實現-安卓-計算機畢業設計

1、用戶模塊&#xff1a; 1&#xff09;登錄&#xff1a;用戶注冊登錄賬號。 2&#xff09;留學查詢模塊&#xff1a;查詢學校的入學申請條件、申請日期、政策變動等。 3&#xff09;院校排名&#xff1a;查詢國外各院校的實力排名。 4&#xff09;測試功能&#xff1a;通過入學…

Spring Boot WebSocket 客戶端

介紹 WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議&#xff0c;它可以提供實時的、雙向的數據傳輸。Spring Boot 提供了對 WebSocket 的支持&#xff0c;我們可以使用 Spring Boot WebSocket 客戶端來連接到 WebSocket 服務器&#xff0c;并進行實時通信。 本文將…

python-選擇排序

選擇排序是一種簡單直觀的排序算法&#xff0c;它的基本思想是每一輪選擇未排序部分的最小元素&#xff0c;然后將其放到已排序部分的末尾。這個過程持續進行&#xff0c;直到整個數組排序完成。(重點&#xff1a;通過位置找元素) 以下是選擇排序的詳細步驟和 Python 實現&…