【力扣高頻題】011. 盛最多水的容器

前面的算法文章,更新了許多 專題系列 。包括:滑動窗口、動態規劃、加強堆、二叉樹遞歸套路 等。

還沒讀過的小伙伴可以關注一下,在主頁中點擊對應鏈接查看哦~

接下來的一段時間,將持續 「力扣高頻題」 系列文章,想刷 力扣高頻題 的小伙伴也可以關注一波哦 ~

言歸正傳,今天我們來講一道中等難度的力扣高頻題,與 接雨水問題 很類似哦~

11. 盛最多水的容器

給定一個長度為 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:

輸入: [1,1]

輸出: 1

  • 提示:
  • n == height.length
  • 2 <= n <= 1 0 5 10^5 105
  • 0 <= height[i] <= 1 0 4 10^4 104

思路分析

一個很簡單的道理:能夠裝多少水量,取決于較短的豎線的 長度 ,以及兩根豎線之間的 距離

總水量 = 較短的長度(高度) × 距離(寬度)

由于兩個因素變量是相乘的關系,兩者的改變可能會導致結果呈現此起彼伏的變化,不便于討論分析。因此,需要想辦法控制變量。

顯然,若 高度一樣 的情況下,距離越長 能夠存儲的 最大水量越大 。最終要找的就是最大值,因此設置兩個指針一開始先分別指向數組的首尾(此時距離最長),然后逐步縮小該距離(即移動雙指針)。

要想當 距離縮短 時,反而獲得更大的存儲水量,唯一的辦法就是 增高較短邊的長度

思考到這里,做題的思路就逐步清晰了:縮短距離時,優先要移動此時較短的指針,只有這樣才能有增大最終答案的 可能性

如果錯誤的先移動了較長的邊,高度只有可能 不變或減小 ,距離 一定會減小,導致了最終答案也一定是 變小,做了無用功。

代碼

public static int maxArea(int[] h) {int max = 0;int l = 0;int r = h.length - 1;while (l < r) {max = Math.max(max, Math.min(h[l], h[r]) * (r - l));if (h[l] > h[r]) {r--;} else {l++;}}return max;
}

代碼解釋

  1. 當前最大水量的計算:左右指針中最短的邊 × 距離l - r
  2. 通過if - else語句判斷雙指針此時指向的高度,誰短移動誰 。
  3. 設置max變量更新最大值,遍歷結束(兩指針相遇),得到最終最大蓄水量。
  • 復雜度分析
    • 時間復雜度: O ( N ) O(N) O(N),雙指針一共遍歷數組一遍即可。
    • 空間復雜度: O ( 1 ) O(1) O(1)

刷過類似題目的小伙伴很容易想到一道很經典的題目 接雨水 問題,點贊關注,下次我們接著講!


~ 點贊 ~ 關注 ~ 星標 ~ 不迷路 ~!!!

回復「ACM紫書」獲取 ACM 算法書籍 ~
回復「算法導論」獲取 算法導論第3版 ~

在看 + 轉發

讓你的小伙伴們一起來學算法吧!!

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

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

相關文章

Java基礎知識-線程池

1、為什么要用線程池&#xff1f; 創建線程要花費昂貴的資源和時間&#xff0c;如果任務來了才創建線程那么響應時間會變長&#xff0c;而且一個進程能創建的線程數 有限。為了避免這些問題&#xff0c;在程序啟動的時候就創建若干線程來響應處理&#xff0c;它們被稱為線程池&…

使用pywinauto自動重連easyconnect

啟動easyconnect后&#xff0c;運行該腳本&#xff0c;實現自動重連。需要填一下連接的地址&#xff0c;用戶名和密碼(替換一下腳本里的xxx) from pywinauto import application from pywinauto import timings import time# 初始化應用程序對象 app1 application.Applicatio…

2710. 移除字符串中的尾隨零 Easy

給你一個用字符串表示的正整數 num &#xff0c;請你以字符串形式返回不含尾隨零的整數 num 。 示例 1&#xff1a; 輸入&#xff1a;num "51230100" 輸出&#xff1a;"512301" 解釋&#xff1a;整數 "51230100" 有 2 個尾隨零&#xff0c;移…

idea2024使用springboot3.x系列新建java項目,使用jdk17,啟動項目報錯

身為一名開發人員&#xff0c;敲代碼無數&#xff0c;竟被一個小小啟動給我卡了大半天&#xff0c;太丟臉了 報錯一&#xff1a;Field infoSysRepository in com.erectile.Impl.PersonalInfoServiceImpl required a bean of type ‘com.erectile.jpa.repository.InfoSysReposit…

Spring:Spring中分布式事務解決方案

一、前言 在Spring中&#xff0c;分布式事務是指涉及多個數據庫或系統的事務處理&#xff0c;其中事務的參與者、支持事務的服務器、資源管理器以及事務管理器位于分布式系統的不同節點上。這樣的架構使得兩個或多個網絡計算機上的數據能夠被訪問并更新&#xff0c;同時將這些操…

使用通用的響應格式

使用泛型響應類&#xff08;或者類似的響應封裝類&#xff09;在網絡編程和API設計中有很多好處&#xff0c;包括但不限于以下幾點&#xff1a; 統一響應格式&#xff1a; 使用R<T>可以確保API的所有響應都遵循相同的格式&#xff0c;這有助于客戶端更容易地解析和處理響…

IP地址與在線教育平臺資源分配優化

IP地址的資源分配與優化策略可以幫助在線教育平臺提供更高質量、穩定且個性化的教育服務。 IP地址作為網絡設備的標識符&#xff0c;能夠為在線教育平臺提供有關學生地理位置和網絡環境信息。通過對學生IP地址的分析&#xff0c;平臺可以初步了解學生所在的地區、網絡服務提供商…

回收站的照片刪除了怎么找回?

大家在日常使用電腦的過程中&#xff0c;難免會遇到不小心刪除重要文件的情況&#xff0c;尤其是珍貴的照片。當我們意識到誤刪照片時&#xff0c;第一反應通常是去回收站找回。然而&#xff0c;如果連回收站的照片都被刪除了&#xff0c;該如何恢復呢&#xff1f;本文將詳細探…

【MySQL】事務的快照生成時間點和薛定諤的貓相關?

概述 最近因為工作需要&#xff0c;對MySQL的事務處理進行了一系列測試驗證&#xff0c;其中&#xff0c;對于MySQL的事務到底時什么時候生成了數據的快照&#xff0c;結果似乎跟薛定諤的貓理念很像&#xff0c;很有意思&#xff1b;過程我貼出來&#xff0c;有興趣的朋友可以一…

Python提供API給JAVA調用,實現Python和Java之間的交互

一、Java 調用Python 提供的API接口&#xff0c;有多種方法&#xff0c;本文通過Python 提供的Rest API進行調用 二、在Python中創建一個REST API&#xff0c;你可以使用許多框架&#xff0c;其中兩個最流行的框架是Flask和Django REST framework。這兩個框架都提供了創建REST…

Dockerfile詳情,Django項目中使用Dockerfile

Dockerfile詳情&#xff0c;Django項目中使用Dockerfile 目錄 Dockerfile詳情&#xff0c;Django項目中使用Dockerfile介紹常用指令Dokcerfile部署Django項目安裝Docker獲取項目源碼Dockerfile文件構建Docker鏡像運行Docker容器 介紹 Dockerfile是一個文本文件&#xff0c;一般…

simulink開發stm32,使用中斷模塊,無法產生中斷,其中包括使用timer模塊,以及ADC都無法產生中斷,需要注意的地方

1&#xff0c;其中包括使用timer模塊&#xff0c;以及ADC都無法產生中斷&#xff0c;需要注意的地方 原來是需要在配置文件里開啟一下timer的中斷&#xff0c;其他模塊自動加載ioc就可以了&#xff0c;這個timer需要注意力&#xff0c;需要自己勾選一下 如下圖&#xff1a; 看…

提升 Selenium 測試穩定性的秘訣:深入理解等待 API 的使用

目錄 為什么需要等待Selenium 等待 API 簡介隱式等待顯式等待Fluent Wait等待策略的選擇示例代碼總結 正文 1. 為什么需要等待 在 Web 自動化測試中&#xff0c;等待是一個關鍵因素。網絡應用通常是動態的&#xff0c;頁面加載時間、元素的顯示時間都可能不同步。直接操作這…

致敬經典:在國產開源操作系統 RT-Thread 重溫 UNIX 彩色終端

引言 上篇文章里我們向大家介紹了 RT-Thread v5.1.0 的一些新特性。其中包括了終端環境的進一步完善。終端是人機交互的重要接口。實用的終端工具可以顯著地提升系統使用者的幸福指數。舉例來說&#xff0c;當我們想要修改一些系統配置&#xff0c;或是編寫腳本時&#xff0c;一…

Linux——echo命令,管道符,vi/vim 文本編輯器

1.echo 命令 作用 向終端設備上輸出字符串或變量的存儲數據 格式 echo " 字符串 " echo $ 變 量名 [rootserver ~] # echo $SHELL # 輸出變量的值必須加 $ /bin/bash [rootserver ~] # str1" 我愛中國 " # 自定義變量 echo 重定向輸出到文件 ec…

MySQL數據庫——在Centos7環境安裝

MySQL在Centos7環境安裝 1.切換root用戶 安裝與卸載中&#xff0c;用戶全部切換成為root&#xff0c;安裝好后&#xff0c;普通用戶也能使用 2.卸載不要的環境 要將自己環境中有關mysql的全都刪除&#xff0c;避免安裝過程中被影響 ps axj | grep mariadb 先檢查是否有mari…

近似最近鄰查找的幾種方法

近似最近鄰查找 定義主要方法1. 局部敏感哈希&#xff08;LSH&#xff09;2. KD樹&#xff08;k-d tree&#xff09;3. 球樹&#xff08;Ball Tree&#xff09;4. 隨機投影樹&#xff08;Random Projection Trees&#xff09;5. 圖結構方法&#xff08;Graph-Based Methods&…

自制全網最便宜的雷達感應燈光畫,成本只需5元

自制全網最便宜的雷達感應燈光畫&#xff0c;成本5元 ? 成本組成&#xff1a;帶熱釋電的人體感應燈&#xff08;0.5元&#xff09;雷達感應模塊&#xff08;3.5元&#xff09;首飾盒&#xff08;0.45元&#xff09;微噴油畫布&#xff08;1元&#xff09;5.45元 ? 說一下做燈…

Flutter學習:從搭建環境到運行

一、開發環境的搭建 本文所示內容都是在Windows系統下進行的。 1、下載 Flutter SDK Flutter 官網&#xff08;https://docs.flutter.cn/release/archive?tabwindows&#xff09; 或者通過 git clone -b master https://github.com/flutter/flutter.git 下載 2、配置環境…

[數據集][目標檢測]井蓋未蓋好檢測數據集VOC+YOLO格式20123張2類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;20123 標注數量(xml文件個數)&#xff1a;20123 標注數量(txt文件個數)&#xff1a;20123 標…