力扣——盛最多水的容器

題目描述:

給定一個長度為?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 <= 1e5
  • 0 <= height[i] <= 1e4

一開始看這道題的時候,以為是動態規劃,沒想到是貪心!所以,求解本題的關鍵是,找到貪心的方法。

方法:當我們尋找最大容量時,可以從兩邊開始,然后向中間靠(我們知道,容器的體積取決于短邊的長度),向中間靠意味著長方形的寬一定會變小(把容器的側截面看作是長方形)

1、如果是長邊向內,如果下一條是更長邊,那對整個容器的長不起作用,因為容器的體積取決于短邊,但是寬變小,所以此時容器的體積一定變小;如果下一條是更短邊,那整個容器的短邊就更短,并且寬變小,則整個容器的體積就會更小。所以長邊向內,容器體積一定會變小

2、如果是短邊向內,如果下一條是更長邊,那此時容器的短邊就會更新,變成min(原來的長邊,此時的新長邊),但是向中間靠會使長方形的寬變小,但是長變大了,所以整個容器可能會變大,但是這就給我們提供了貪心的機會,有機會變大;如果下一條是更短邊,那容器的體積就一定會變小;

綜上所述,只有當短邊向內的時候,容器的體積才有變大的可能性,所以我們設立兩個指針,每次判斷哪邊是短邊,然后一步一步向內靠攏即可;


AC代碼:

class Solution {
public:int maxArea(vector<int>& height) {int len = 0;len = height.size();int i=0, j=len-1;//i左指針,j右指針int v=0;//容量int _min =0;while(i<j){_min = height[i] < height[j] ? height[i] : height[j];v = v > _min * (j - i) ? v : _min * (j - i);if(height[i]<height[j])i++;else j--;}return v;}
};

可能大家還有幾點疑惑:

1、我們能不能從中間向兩邊擴展,這樣不是更容易使容器的體積變大嗎?當從中間向兩邊擴展時,那長方形的寬一定變大,則體積的大小完全取決于兩邊中的更短邊,跟上面一樣分析;

如果是長邊向外,如果下一條是更長邊,那對整個容器的長也不起作用,但寬變大,所以容器的體積一定變大;如果下一條是更短邊,那整個容器的短邊就更短,但寬變大,所以此時并不能判斷容器體積變大還是變小;

如果是短邊向外,如果下一條是更長邊,那此時容器的短邊就會更新,變成min(原來的長邊,此時的新長邊),寬變大,長也變大了,所以容器一定會變大;如果下一條是更短邊,但寬變大,所以此時并不能判斷容器體積變大還是變小;

綜上可知,此時無論是移動長邊還是短邊,都是可能讓容器體積變大或變小,所以這種方法不行。

2、另一個知識點是C++的三木運算符:?condition ? expression1 : expression2;這個很簡單

舉個例子:z = x > y ? x : y ,意思是判斷x和y誰更大,如果x更大,則x>y成立,把x賦值給z,否則z=y;

希望能幫助到大家!謝謝~

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

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

相關文章

最短路徑(2.19)

目錄 1.網絡延遲時間 弗洛伊德算法 迪杰斯特拉算法 2. K 站中轉內最便宜的航班 3.從第一個節點出發到最后一個節點的受限路徑數 4.到達目的地的方案數 1.網絡延遲時間 有 n 個網絡節點&#xff0c;標記為 1 到 n。 給你一個列表 times&#xff0c;表示信號經過 有向 邊的…

day32貪心算法 part02

貪心系列的時候&#xff0c;題目和題目之間貌似沒有什么聯系,是真的就是沒什么聯系&#xff0c;因為貪心無套路,沒有個整體的貪心框架解決一系列問題&#xff0c;只能是接觸各種類型的題目鍛煉自己的貪心思維。貪心只是一類題的統稱&#xff0c;并沒有什么固定套路。 122. 買賣…

Android NDK底層BUG,記錄:connect、socket(AF_INET, SOCK_STREAM, 0) 等系統套接字接口函數崩潰問題。

在 Android NDK 之中&#xff0c;看上去調用 connect、socket 函數是不會崩潰的&#xff0c;但這是否定的&#xff0c;它在特定的情況下存在必定的崩潰的問題。 但是這種情況放到MACOS、LINUX、WINDOWS都不會崩潰&#xff0c;而它崩潰的點出現在操作系統底層。 人們需要參考這…

香橙派企業信用問題-勸一個是一個,別買!!!

1. 背景 香橙派推廣旗下AI PRO 開發板&#xff0c;在B站做直播&#xff0c;一場直播兩個直播間&#xff0c;分別抽取一名觀眾&#xff0c;宣傳是場場送AI PRO開發板&#xff01;&#xff01;&#xff01; 2. 收到獎品與宣傳不符合 3.咨詢群主&#xff1a;態度很傲慢&#xff0c…

MES的生產計劃管理與ERP的生產計劃管理到底有什么不同?

在制造業信息化的道路上&#xff0c;ERP系統和MES系統是兩個非常重要的信息化管理工具。大多數制造業企業往往首先考慮上ERP系統&#xff0c;經過一段時間的深度使用后&#xff0c;再引進MES系統進行報工或數采。但我們可以發現&#xff0c;這兩個系統都能進行生產管理&#xf…

數學建模團隊分工建議

文章目錄 引言數學建模概述數學建模團隊的組成與角色定位一、團隊組成與角色定位1.1 團隊成員1.2 角色定位 二、團隊協作方式 分工方案分工原則分工策略 按照任務流程分工數據收集與處理分工模型建立與優化分工結果分析與報告撰寫分工用代碼來表示這個過程 總結模塊目錄模塊一&…

詳細了解網絡通信流程、協議組成、編碼方式、數據傳輸方式和途徑、Http 協議的編碼、cookie的使用和提取路徑

詳細了解網絡通信流程、協議組成、編碼方式、數據傳輸方式和途徑、Http 協議的編碼、cookie的使用和提取路徑。 一、網絡通信簡介 現代的網絡傳輸介質以以太網鏈路居多,完整的網絡數據報結構大致如下。傳輸層及其以下的機制由操作系統內核提供,應用層由用戶進程提供,應用程…

上位機圖像處理和嵌入式模塊部署(qmacvisual學習1)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 雖然我們前面學習了很多的知識點&#xff0c;比如說在windows這邊&#xff0c;用qt寫界面&#xff0c;用opencv寫圖像處理代碼&#xff1b;在linux…

二維碼門樓牌管理系統技術服務:構建智慧城市的基石

文章目錄 前言一、標準地址設置規則二、門樓牌作為標準地址的法定載體三、二維碼門樓牌管理系統技術服務的優勢與應用前景 前言 在智慧城市建設的浪潮中&#xff0c;二維碼門樓牌管理系統技術服務以其高效、便捷的特性&#xff0c;逐漸成為城市管理的重要工具。本文將深入探討…

一張草圖直接生成視頻游戲,谷歌推出生成交互大模型

谷歌DeepMind的研究人員推出了&#xff0c;首個無需數據標記、無監督訓練的生成交互模型——Generative Interactive Environments&#xff0c;簡稱“Genie”。 Genie有110億參數&#xff0c;可以根據圖像、真實照片甚至草圖&#xff0c;就能生成各種可控制動作的視頻游戲。Ge…

項目可行性方案:人臉識別實現無感考勤的項目技術可行性方案

目 錄 1.引言 1.1編寫目的 1.2背景 2.可行性研究的前提 2.1要求 2.2目標 3.對現有系統的分析 3.1系統改進示意圖 3.2改進之處 3.3技術條件方面的可行性 4.結論 1.引言 1.1編寫目的 本報告編寫的目的是探究學校里對教室和辦公室內教師的人臉進行識別從而…

Linux --- 應用層 | HTTP | HTTPS

前言 前面寫的TCP/UDP客戶端在訪問服務端的時候&#xff0c;需要輸入ip地址和端口號才可以訪問&#xff0c; 但在現實中&#xff0c;我們訪問一個網站是直接輸入的一個域名&#xff0c;而不是使用的ip地址端口號。 比如在訪問百度 https://www.baidu.com/的時候&#xff0c; …

RocketMQ - 深入研究一下消費者是如何獲取消息處理以及進行ACK

1. 消費者組到底是個什么概念 消費者組的意思就是讓你給一組消費者起一個名字,比如有一個Topic叫“TopicOrderPaySuccess”,然后假設有庫存系統、積分系統、營銷系統、倉儲系統他們都要去消費這個Topic中的數據。 此時我們應該給這四個系統分別起一個消費組的名字,比如sto…

Linux:管道文件及相關API

目錄 前言一、管道文件1、基本概念2、匿名(無名)管道3、命名(有名)管道4、管道的特點5、思考&#xff1a;何時只能使用無名管道&#xff0c;何時又只能用有名管道&#xff1f;無名管道&#xff08;匿名管道&#xff09;適用的情況&#xff1a;有名管道&#xff08;命名管道&…

2024最新AI系統ChatGPT網站源碼, AI繪畫系統

一、前言說明 R5Ai創作系統是基于ChatGPT進行開發的Ai智能問答系統和Midjourney繪畫系統&#xff0c;支持OpenAI-GPT全模型國內AI全模型。本期針對源碼系統整體測試下來非常完美&#xff0c;那么如何搭建部署AI創作ChatGPT&#xff1f;小編這里寫一個詳細圖文教程吧。已支持GP…

CVE-2024-23334 AIOHTTP 目錄遍歷漏洞分析

漏洞描述&#xff1a; aiohttp 是一個用于 asyncio 和 Python 的異步 HTTP 客戶端/服務器框架。使用aiohttp作為Web服務器并配置靜態路由時&#xff0c;需要指定靜態文件的根路徑。此外&#xff0c;選項“follow_symlinks”可用于確定是否遵循靜態根目錄之外的符號鏈接。當“f…

css樣式元素的相對定位,絕對定位,固定定位等元素定位運用技巧詳解

文章目錄 1.相對定位 relative2.絕對定位 absolute3.固定定位4.display 轉換元素5.float浮動6.float產生內容塌陷問題7.overflow CSS樣式學習寶典&#xff0c;關注點贊加收藏&#xff0c;防止迷路哦 在CSS中關于定位的內容是&#xff1a;position:relative | absolute | static…

Unreal觸屏和鼠標控制旋轉沖突問題

Unreal觸屏和鼠標控制旋轉沖突問題 鼠標控制攝像機旋轉添加Input軸計算旋轉角度通過軸事件控制旋轉 問題和原因問題原因 解決辦法增加觸摸控制旋轉代碼觸屏操作下屏蔽鼠標軸響應事件 鼠標控制攝像機旋轉 通過Mouse X和Mouse Y控制攝像機旋轉。 添加Input軸 計算旋轉角度 通過…

SpringBootWeb快速入門

1.創建springboot工程&#xff0c;新建module 2.勾選web開發相關依賴 3.刪除多余文件 4.新建類 5.啟動類中運行main方法 6.啟動 默認端口號8080 7.打開瀏覽器&#xff0c;地址欄輸入 8.報錯 9.原因&#xff0c;控制層位置放錯&#xff0c;剪切controller層放進com.example …

[vue error] TypeError: Components is not a function

問題詳情 問題描述: element plus按需導入后&#xff0c;啟動項目報錯&#xff1a; 問題原因 unplugin-vue-components插件版本問題 查看 unplugin-vue-components插件可以發現版本太高了 問題解決 unplugin-vue-components 版本高了&#xff0c;我用的0.26.0&#xff0c…