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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...