当前位置: 首页 > news >正文

★ 算法OJ题 ★ 力扣11 - 盛水最多的容器

Ciallo~(∠・ω< )⌒☆ ~ 今天,我将和大家一起做一道双指针算法题--盛水最多的容器~

目录

一  题目

二  算法解析

三  编写算法


一  题目

11. 盛最多水的容器 - 力扣(LeetCode)

二  算法解析

解法1:暴力枚举

算法思路:双层循环,枚举出能构成的所有容器,找出其中容积最⼤的值。(会超时)

解法2:对撞指针

如题目中的示例1:1 8 6 2 5 4 8 3 7

算法思路:

设两个指针 left , right 分别指向容器的左右两个端点,容器的左边界为 height[left] ,右边界为 height[right] 。

如果此时我们固定⼀个边界,改变另⼀个边界,假设height[left] < height[right],水的容积:

  • 容器的宽度⼀定变小。
  • 由于左边界较小,决定了水的高度。如果改变左边界,新的水面高度不确定,但是⼀定不会超 过右边的柱⼦高度,因此容器的容积可能会增大
  • 如果改变右边界,无论右边界移动到哪里,新的⽔⾯的⾼度⼀定不会超过左边界,也就是不会 超过现在的水面高度,但是由于容器的宽度减小,因此容器的容积⼀定会变小的

故左边界和其余边界的组合情况都可以舍去。

循环上述过程,每次都可以舍去⼤量不必要的枚举过程,直到 left 与 right 相遇。期间产⽣的所有的容积里面的最大值,就是最终答案。

三  编写算法

class Solution {
public:int maxArea(vector<int>& height) {int left = 0, right = height.size() - 1;int v = 0;while(left < right){int ret = min(height[left], height[right]) * (right - left);v = max(ret, v); // 更新最大面积// 哪个小删哪个if(height[left] < height[right])left++;elseright--;}return v;}
};


http://www.mrgr.cn/news/15881.html

相关文章:

  • SpringBoot SSM vue在线作业考试系统
  • vue子组件样式影响父组件
  • 使用 ip addr add 命令管理网络接口 IP 地址
  • 解题-写一个程序判断当前机器的大小端存储模式 #两种方法
  • SpringCloud乐尚代驾学习笔记:司机端登录(四)
  • 【化学方程式配平 / 3】
  • 笔记:应用Visual Studio Profiler分析CPU使用情况
  • Python数据分析的数据导入和导出
  • 「数组」二分查找模版|二段性分析|恢复二段性/ LeetCode 35|33|81(C++)
  • Python中的“break”与“continue”:控制循环的艺术
  • DDR test Tool for imx9
  • 【Python篇】Python 类和对象:详细讲解(上篇)
  • 生产环境中变态开启devtools(强制)
  • classA cla= ...; if(cla == nullptr) 这种写法是否安全
  • 远程教学必备神器:热门远程控制软件大盘点
  • Vue3.0教程001:Vue3简介
  • 一些零碎的关于合约测试,ERC20调用的知识
  • python基础(14内置函数介绍)
  • 第22周:调用Gensim库训练Word2Vec模型
  • 掌握SQL数据分割技巧:垂直与水平分割全解析