LeetCode 11. 盛最多水的容器

来源:https://www.cnblogs.com/izhoujie/archive/2020/04/18/12727671.html
-Advertisement-
Play Games

我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 11. 盛最多水的容器 題目 給你 n 個非負整數 a1,a2 ...


我的LeetCode:https://leetcode-cn.com/u/ituring/

我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii

LeetCode 11. 盛最多水的容器

題目

給你 n 個非負整數 a1,a2,...,an,每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。

說明:你不能傾斜容器,且 n 的值至少為 2。

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

示例:

輸入:[1,8,6,2,5,4,8,3,7]
輸出:49

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/container-with-most-water
著作權歸領扣網路所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

解題思路

本題相像的是LeetCode 42. 接雨水,可以對比學習;

思路1-貪心演算法之雙指針遍歷

首先明確兩個擋板中的最小擋板決定了儲水上限,所以貪心或者說動態規劃時圍繞這個關鍵點展開;
步驟:

  1. 當前兩擋板中的最小值乘以擋板間距就是儲水量,每次都移動左右擋板一次,每次移動只有找到比當前最小擋板大的擋板時才停止(若小於,擋板高度不變但間距變小,出水量只會減少);
  2. 以當前兩個新擋板的最小值乘以其間距為最大儲水量,並對比1更新最大儲水量,然後迴圈進行1之後的操作直至左右擋板相遇;

演算法複雜度:

  • 時間複雜度: $ {\color{Magenta}{\Omicron\left(N\right)}} $
  • 空間複雜度: $ {\color{Magenta}{\Omicron\left(1\right)}} $

演算法源碼示例

package leetcode;

/**
 * @author ZhouJie
 * @date 2019年12月12日 下午9:34:10 
 * @Description: 11. 盛最多水的容器
 *
 */
public class LeetCode_0011 {

}

class Solution_0011 {
	public int maxArea(int[] height) {
		int len = 0;
		if (height == null || (len = height.length) < 2) {
			return 0;
		}
		int i = 0, j = len - 1;
		int max = 0;
		int min = 0;
		while (i < j) {
			// 當前左右擋板中的小值
			min = Math.min(height[i], height[j]);
			// 記錄最大儲水
			max = Math.max(max, min * (j - i));
			// 向後找到第一個比min大的位置
			while (i < j && height[i] <= min) {
				i++;
			}
			// 向前找到第一個比min大的位置
			while (i < j && height[j] <= min) {
				j--;
			}
		}
		return max;
	}
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本系列文章為《編寫高質量代碼——改善Python程式的91個建議》的精華彙總。 首發於公眾號【Python與演算法之路】 關於導入模塊 Python的3種引入外部模塊的方式: 語句、 和 函數。其中前兩種比較常見。 在使用 時,應註意: 優先使用 或 有節制的使用 儘量避免使用 對於 ,如果無節制的使 ...
  • 本系列文章為《編寫高質量代碼——改善Python程式的91個建議》的精煉彙總。 利用assert語句發現問題 assert語句的基本語法如下: 其中, 是判斷語句,會返回True或False,當返回False時會引發AssertionError。 中的內容表示是可選的,用來傳遞具體的異常信息。 利用 ...
  • 1. 應用K-means演算法進行圖片壓縮 讀取一張圖片 觀察圖片文件大小,占記憶體大小,圖片數據結構,線性化 用kmeans對圖片像素顏色進行聚類 獲取每個像素的顏色類別,每個類別的顏色 壓縮圖片生成:以聚類中收替代原像素顏色,還原為二維 觀察壓縮圖片的文件大小,占記憶體大小 from sklearn. ...
  • REST:即 Representational State Transfer。(資源)表現層狀態轉化 。是目前最流行的一種互聯網軟體架構。它結構清晰、符合標準、易於理解、擴展方便, 所以正得到越來越多網站的採用。使用 REST 風格的請求方式,可以簡化 url,達到使用同一個 url 不同請求方式來 ...
  • HTTP 405 的錯誤提示:消息 JSP 只允許 GET、POST 或 HEAD。Jasper 還允許 OPTIONS 的解決方法 ...
  • A - Balloons 題意:本題的題意比較簡單,簡單說就是分數字,使得A得到的數字之和大於B得到的數字之和,然後輸出分給A的數字的下標。 題解:要註意特判n==1和n==2的情況,屬於簽到題。 代碼: #include<iostream> #include<algorithm> #include ...
  • 按照計劃,這篇開始嘗試用elastic4s來做一系列索引管理和搜索操作示範。前面提過,elastic4s的主要功能之一是通過組合Dsl語句形成json請求。那麼我們先試試組合一些Dsl語句,再想辦法產生出json請求文本,然後在kibana控制臺中驗證它的正確性。 首先看看elastic4s提供的一 ...
  • 如何在抖音上找到漂亮小姐姐 抖音機器人 最近沉迷於抖音無法自拔,常常花好幾個小時在抖音漂亮小姐姐身上。 為了高效、直接地找到漂亮小姐姐,我用 Python + ADB 做了一個 Python 抖音機器人 Douyin-Bot。 特性 [x] 自動翻頁 [x] 顏值檢測 [x] 人臉識別 [x] 自動 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...