leetcode11-盛水最多的容器

leetcode 11
在這里插入圖片描述

思路

問題分析

拆解問題,面積 = 底 * 高

  • 寬度:兩個豎直線之間的距離,顯然是 right - left
  • 高度:容器的水位受限于較短的那根豎直線的高度,所以高度為 min(height[left], height[right])

本題其實很容易想到暴力解法,通過雙重遍歷,計算每一對豎直線所能形成的容器的面積,并記錄最大面積。但這種方法的時間復雜度是 O(n2),效率較低,并且無法在leetcode中通過

優化解法-雙指針法
  • 由于容器的面積受制于最短的那根豎直線,所以優化的關鍵在于動態調整左右指針的指向,跳過不必要的比較
  • 我們使用雙指針的方式,初始化 left 指針在數組的開頭,right 指針在數組的末尾,計算當前容器的面積:
    • 如果 height[left] < height[right],則移動 left 指針,目的是嘗試找到一個更高的左邊豎直線,增加可能的面積。
    • 如果 height[left] >= height[right],則移動 right 指針,嘗試找到一個更高的右邊豎直線。
  • 每次移動指針時,都會計算并更新最大面積
為什么雙指針法有效
  • 雙指針法通過始終選擇最短的豎直線來決定移動哪一邊指針。因為較短的那根豎直線是面積的瓶頸,只有嘗試替換較短的線,才能可能增加容器的面積
  • 如果我們不這么做,選擇較長的線是沒有意義的,因為更短的那條線限制了容器的容量

實現

var maxArea = function (height) {let left = 0, right = height.length - 1;let max = 0;while (left < right) {let min = Math.min(height[left], height[right])const area = (right - left) * min;max = Math.max(max, area)if (min === height[left]) {// 左邊值更小left++} else {right--}}return max;
};

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

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

相關文章

HTTP:十二.HTTPS

HTTPS 概述 超文本傳輸安全協議(英語:HyperText Transfer Protocol Secure,縮寫:HTTPS;常稱為HTTP over TLS、HTTP over SSL或HTTP Secure)是一種通過計算機網絡進行安全通信的傳輸協議。HTTPS經由HTTP進行通信,利用TLS加密數據包。 HTTPS的主要目的是提供對網站服務器…

MySQL數據庫(14)—— 使用C操作MySQL

目錄 一&#xff0c;下載庫 二&#xff0c;安裝庫 三&#xff0c;使用庫 3.1 連接數據庫 3.2 發送SQL 3.3 獲取結果 問題&#xff1a;為什么不使用C&#xff1f; 解答&#xff1a;使用C的庫已經可以完成絕大部分MySQL操作了&#xff0c;并且C的庫的使用更加復雜&#xff…

Redis故障防御體系:構建七層免疫系統的設計哲學

當Redis遭遇寫入阻塞或服務崩潰時&#xff0c;本質上是系統邊界的多重防御機制被擊穿。本文摒棄碎片化的解決方案&#xff0c;從系統工程的全局視角&#xff0c;構建七層遞進式防御體系&#xff0c;揭示高可用架構的深層設計邏輯。 第一層&#xff1a;動態資源調度 —— 內存的…

在線文本客服系統核心功能解析

在線文本客服系統核心功能解析 在互聯網大廠的Java求職者面試中&#xff0c;經常會被問到關于在線文本客服系統的實現和設計。本文通過一個故事場景來展示這些問題的實際解決方案。 第一輪提問 面試官&#xff1a;馬架構&#xff0c;歡迎來到我們公司的面試現場。請問您對在…

學成在線。。。

一:講師管理 介紹:可以實現對講師的分頁展示,多條件組合分頁查詢,對講師的添加,修改,刪除操作。 針對于添加來說,使用requestBody注解,搭配postmapping接收數據,使用service層的對象,調用mapper方法,向數據庫中保存數據。 修改: 先根據講師id,查詢出講師,再去…

Webug3.0通關筆記17 中級進階(第01-05關)

目錄 第一關 出來點東西吧 1.打開靶場 2.源碼分析 3.源碼修正 4.文件包含漏洞滲透 第二關 提交方式是怎樣的啊&#xff1f; 1.打開靶場 2.源碼分析 3.滲透實戰 &#xff08;1&#xff09;bp改包法 &#xff08;2&#xff09;POST法滲透 第三關 我還是一個注入 1.打開…

C語言復習筆記--內存函數

在復習完字符函數和字符串函數之后,今天讓我們復習一下內存函數吧.這一塊的東西不太多,并且與之前的字符串函數有一些地方很相似,所以這里應該會比較輕松. memcpy使用和模擬實現 老規矩,先看函數原型 void * memcpy ( void * destination, const void * source, size_t num );…

【Unity AR開發插件】一、高效熱更新:Unity AR 插件結合 HybridCLR 與 ARFoundation 的開源倉庫分享

摘要 本篇博客詳細介紹了我基于 HybridCLR 與 AR Foundation 的 Unity AR 開發插件&#xff0c;旨在為開發者提供高效的跨平臺熱更新方案。文章從背景與動機出發&#xff0c;覆蓋一鍵安裝工具、環境配置、熱更新數據制作與示例程序運行等核心模塊&#xff0c;并展示代碼結構與使…

數據分析(四):Python Pandas數據輸入輸出全流程指南

Python Pandas數據輸入輸出全流程指南 1. 引言 數據輸入輸出(I/O)是數據分析工作流中最基礎也是最重要的環節之一。Pandas提供了豐富的數據讀寫接口&#xff0c;支持從各種文件格式和數據庫中加載數據&#xff0c;以及將處理后的數據保存到不同存儲系統中。本文將全面介紹Pan…

人工智能與機器學習:Python從零實現性回歸模型

?? 向所有學習者致敬! “學習不是裝滿一桶水,而是點燃一把火。” —— 葉芝 我的博客主頁: https://lizheng.blog.csdn.net ?? 歡迎點擊加入AI人工智能社區! ?? 讓我們一起努力,共創AI未來! ?? 前言 在 AI 的熱潮中,很容易忽視那些讓它得以實現的基礎數學和技…

Ubuntu18.04更改時區(圖文詳解)

Ubuntu18.04更改時區 1、前言2、更改時區3、總結 1、前言 記錄一下Ubuntu18.04更改時區的過程&#xff0c;方便自己日后回顧&#xff0c;也可以給有需要的人提供幫助。 2、更改時區 輸入下面的指令&#xff0c;進行時區選擇 tzselect輸入4選擇亞洲&#xff0c;輸入9選擇中…

vue2 項目使用vite2 升級 vite4 后,對別名的解析有問題,導致打包后項目無法正常運行

問題描述&#xff1a; 之前使用的 vite2 版本&#xff0c;需要在 vite.config 里配置 vue 別名&#xff0c;不然會有commonjs 的依賴包找不到 vue&#xff0c;因為 vite 默認使用 esm 版本。 vue: vue/dist/vue.common.prod.js 在 vite2 中可以正常進行打包上線&#xff0c;…

民辦生從零學C的第十二天:指針(1)

每日勵志&#xff1a;拼搏十年&#xff0c;征戰沙場&#xff0c;不忘初心&#xff0c;努力成為一個渾身充滿銅臭味的有錢人。 一.內存和地址 1.內存 計算機內存是一系列存儲單元的集合&#xff0c;每個存儲單元都有唯一的地址來標識。這些存儲單元用于存儲程序的數據和指令。…

用Postman驗證IAM Token的實際操作

當我們需要用Postman發送一個最簡單的請求去驗證Token的時候我們該怎么辦&#xff1f; 【一、步驟】 步驟1&#xff1a;打開Postman&#xff0c;新建一個GET請求 請求地址填&#xff1a; https://iam.cn-north-4.myhuaweicloud.com/v3/auth/projects 解釋一下&#xff1a;…

關于常量指針和指向常量的指針

關于指針&#xff0c;對于常量指針和指向常量的指針也是傻傻分不清。看到定義時&#xff0c;不知道是指針不能變&#xff0c;還是指針指向的內容不能變量。 先看形式&#xff1a; const char * A; char * const B; 這兩種有什么區別&#xff1f;傻傻分不清。 A這種定義&am…

unity 讀取csv

1.讀取代碼 string filePath Application.streamingAssetsPath "\\data.csv"; public List<MovieData> movieData new List<MovieData>(); private void ReadCSV(string filePath) { List<List<string>> data new List<…

安達發|高效智能塑料切割數控系統 - 全自動化軟件解決方案

在當今的制造業中&#xff0c;塑料作為一種輕便、耐用且成本效益高的材料&#xff0c;被廣泛應用于各個領域。隨著科技的進步和市場需求的變化&#xff0c;塑料加工行業正面臨著前所未有的挑戰和機遇。為了提高生產效率&#xff0c;降低成本&#xff0c;并滿足日益嚴格的質量標…

c#接口_抽象類_多態學習

c#接口_抽象類_多態學習 學習日志 關于&#xff1a;c#接口_抽象類_多態的學習記錄。 一、概念 1. 多態&#xff08;Polymorphism&#xff09; 定義&#xff1a;同一操作作用于不同對象時&#xff0c;表現出不同的行為。實現方式&#xff1a; 繼承 方法重寫&#xff08;ov…

智能硬件行業售后服務管理:提升客戶體驗的關鍵所在

在當今數字化浪潮的推動下&#xff0c;智能硬件行業正以前所未有的速度蓬勃發展。從智能家居設備的普及&#xff0c;到智能穿戴產品的多樣化&#xff0c;再到智能辦公設備的廣泛應用&#xff0c;智能硬件已經深入到我們生活的方方面面。據市場研究機構預測&#xff0c;未來幾年…

Vue3 里 CSS 深度作用選擇器 :deep()

&#x1f3af; 解釋 在 Vue 組件里&#xff0c;CSS 默認是 scoped&#xff08;作用域限定的&#xff09;&#xff0c;只對當前組件生效。 如果你想在 scoped 樣式里&#xff0c;穿透到子組件的內部元素&#xff0c;就要用 :deep()。 ?? 示例 比如&#xff0c;你有一個子組件…