LeetCode - 11.盛最多水的容器

news/2024/10/19 0:22:54/

一. 题目链接 

LeetCode - 11.盛最多水的容器

二. 思路解释

利用双指针的思想,定义一个left和reght,left指向首部,right指向尾部,计算当前两个指针所对应的高度构成容器的体积。根据当前双指针所指的高度的大小,然后让指针向内移动,直到left=right(一开始left指向首部,right指向尾部,此时容器的底是最大的,接下来随着指针向内移动,会造成容器的底变小,在这种情况下想要让容器盛水变多,就只有在容器的高上下功夫。 那我们该如何决策哪个指针移动呢?我们能够发现不管是左指针向右移动一位,还是右指针向左移动一位,容器的底都是一样的,都比原来减少了 1。这种情况下我们想要让指针移动后的容器面积增大,就要使移动后的容器的高尽量大,所以我们选择指针所指的高较小的那个指针进行移动,这样做可以保留较高柱子的边界,同时增加找到更高柱子并提升容器高度的可能性

  1. 初始化指针: 设置两个指针,一个在数组的开始位置(称为left),另一个在数组的结束位置(称为right)。

  2. 计算容积: 容器的容积由两个指针指向的柱子中较短的那一个决定(因为水的高度由较短的柱子决定),以及两个柱子之间的距离。容积的计算公式为:(right - left) * min(height[left], height[right])

  3. 移动指针: 比较两个指针指向的柱子的高度:

    • 如果height[left] < height[right],则移动left指针向右移动(即left++),因为在这种情况下,可能存在一个更高的柱子在左指针的右边,能与右指针形成更大容积的容器。
    • 反之,如果height[right] <= height[left],则移动right指针向左移动(即right--),出于同样的逻辑,可能存在一个更高的柱子在右指针的左边。
  4. 重复计算与移动: 持续进行容积的计算,并根据上述逻辑移动指针,直到leftright相遇。

  5. 输出最大容积: 在整个过程中,保持一个变量来记录遇到的最大容积,最后输出这个最大值。

使用双指针方法的优点是时间复杂度为O(n),比暴力解法的O(n^2)要高效得多。这种方法之所以有效,是因为它利用了柱子之间距离的递减和可能遇到更高柱子的机会来逐步缩小搜索范围,同时保证没有错过可能的最大容积配置。

  • 时间复杂度 O(N)
  • 空间复杂度 O(1)

三. 动画解释

四. 代码解释

class Solution {
public:int maxArea(vector<int>& height) {int left = 0;//初始化左指针int right = height.size() - 1;//初始化右指针int res = 0;  // 初始化结果变量while (left < right) {int currentArea = (right - left) * min(height[left], height[right]);//计算当前的面积res = max(res, currentArea);  // 更新最大面积if (height[left] > height[right]) {right--;  // 移动较短的一边} else {left++;  // 移动较短的一边}}return res;}
};

注意:每次进行完计算res体积之后,要和之前的res进行对比,如果比它大就替换,比它小就不替换 


http://www.ppmy.cn/news/1432198.html

相关文章

Ubuntu 20.04和Ubuntu 16.04 集成显卡支持opencl说明

针对Ubuntu 不同版本Ubuntu 20.04和Ubuntu 16.04对集成显卡安装opencl说明. 1、安装支持opencl显卡驱动 1)Ubuntu 20.04 sudo apt-get update sudo apt-get update && sudo apt-get install -y --no-install-recommends curl gpg gpg-agent && sudo curl htt…

微服务之网关路由

一、概述 1.1认识网关 什么是网关&#xff1f; 顾明思议&#xff0c;网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。 更通俗的来讲&#xff0c;网关就像是以前园区传达室的大爷。 外…

个人免签支付、三方收款支付平台推荐

文章目录 背景调研平台推荐一、蓝鲸支付二、V云支付三、云免签 总结 背景 运营过网站的朋友们都知道&#xff0c;最重要和难实现的莫过于支付平台了&#xff0c;因为个人资质压根无法对接微信支付宝的官方平台&#xff0c;如果无法对接支付的话&#xff0c;那就没办法实现资源变…

新质生产力应用场景深度分析,再塑行业格局

新质生产力应用场景深度分析 技术突破、要素创新配置和产业深度转型升级&#xff0c;催生“新质生产力”定义&#xff1a;新质生产力是由技术革命性突破、生产要素创新性配置、产业深度转型升级而催生的当代先进生产力&#xff0c;它以劳动者、劳动资料、劳动对象及 其优化组合…

新网站上线需要注意什么?

质量保证&#xff1a;确保网站的所有功能和页面都经过了充分的测试&#xff0c;并且在各种不同的浏览器和设备上都能够正常运行。检查所有链接、表单和交互式元素&#xff0c;确保它们都能够按照预期工作。优化性能&#xff1a;确保网站加载速度快&#xff0c;响应迅速。优化图…

巧用波卡生态优势,Mythical Games 引领 Web3 游戏新航向

Polkadot 对创新、安全和治理的承诺为 Mythical Games 提供了极大的发展价值。这个链上生态不仅将支持 Mythical Games 成长发展&#xff0c;还将帮助其他 Mythos 合作伙伴来壮大建设项目。 —— Mythical Games 创始人兼首席执行官 John Linden 近期 Web3 游戏行业又有新动向&…

【LeetCode热题100】【动态规划】打家劫舍

题目链接&#xff1a;198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 如果没有房子&#xff0c;那就是0&#xff0c;如果有一间房子&#xff0c;那么就是这间房子&#xff0c;如果有两间&#xff0c;那么就挑一间打劫 如果有多间&#xff0c;对于第i间来说&#xff0…

【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用

《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章&#xff1a; Elasticsearch 从入门到精通&#xff08;一&#xff09;&#xff1a;基本介绍Elasticsearch 从入门到精通&#xff08;二&#xff09;&#xff1a;基础使用 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的…