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

【附JS、Python、C++题解】Leetcode 面试150题(8)

一、题目

11. 盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。你不能倾斜容器。

二、思路

容纳最多的水——(j-i) * min(height[i], height[j])取到最大值

如果直接遍历下去,要比较的次数太多了(也就是指针移动的次数太多了),怎么办呢?

我们要找到简化比较过程的一个规律,可以利用最大储水量依赖的容器高来判断指针如何移动:

1. 初始化两个指针left 指向数组的开头,right 指向数组的末尾。

2. 初始化最大水量most 用于存储最大的水量。

3. 循环条件:当 left 小于 right 时,继续循环。

4. 计算当前水量

  • h 是两个高度中的较小值。
  • width 是两个指针之间的距离。
  • water 是当前容器可以容纳的水量。

5. 更新最大水量:用 Math.max 更新 most

6. 移动指针

  • 如果 height[left] 小于 height[right],增加 left 指针。
  • 否则,减小 right 指针。

7. 返回最大水量在循环结束后返回 most

三、代码

① JavaScript:

function mostWater(height) {
    let left = 0;
    let right = height.length - 1;
    let most = 0;

    while (left < right) {
        const h = Math.min(height[left], height[right]);
        const width = right - left;
        const water = h * width;
        most = Math.max(most, water);

        if (height[left] < height[right]) {
            left++;
        } else {
            right--;
        }
    }

    return most;
};

② python:

def most_water(height):
    left = 0
    right = len(height) - 1
    most = 0

    while left < right:
        h = min(height[left], height[right])
        width = right - left
        water = h * width

        if water > most:
            most = water

        if height[left] < height[right]:
            left += 1
        else:
            right -= 1

    return most

③ C++:

int mostWater(const vector<int>& height) {
    int left = 0;
    int right = height.size() - 1;
    int most = 0;

    while (left < right) {
        int h = min(height[left], height[right]);
        int width = right - left;
        int water = h * width;

        if (water > most) {
            most = water;
        }

        if (height[left] < height[right]) {
            left++;
        } else {
            right--;
        }
    }

    return most;
}

四、反思

上面的代码与下面自己写的代码相比,直接用max方法处理了most和water的判断,简化了步骤,学习! 

相关文章:

  • C 语言分支与循环:构建程序逻辑的基石
  • ubuntu下在pycharm中配置已有的虚拟环境
  • 语音识别踩坑记录
  • 云平台一键部署【SGLang】适用于大型语言模型和视觉语言模型的快速服务框架
  • 小程序酒店:如何实现智能预订与在线支付?
  • windows下docker的安装
  • Git创建仓库和基本命令
  • yum、apt、apt-get的区别与使用
  • apollo3录音到wav播放解决方法
  • Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图】
  • perl、python、tcl语法中读写Excel的模块
  • 【Qt】带参数的信号和槽函数
  • HTML嵌入CSS样式超详解(尊享)
  • 《2025年软件测试工程师面试》MySQL面试题
  • 【性能工具】Perfetto中如何分析主线程为何进入sleep状态
  • Week4_250310~250316_OI日志(待完善)
  • PySide(PyQT),QGraphicsRectItem的setPos()和setRect()的坐标位置的区别
  • Dynamics 365 新版的Power apps开发界面中如何找到开发者资源
  • WM_CREATE
  • nndl: chap1_warmup_numpy_tutorial
  • 哈尔滨工业大学原副校长王魁业逝世,享年92岁
  • 广西钦州:坚决拥护自治区党委对钟恒钦进行审查调查的决定
  • 三星“七天机”质保期内屏幕漏液被要求自费维修,商家:系人为损坏
  • 游客称在网红雪山勒多曼因峰需救援被开价2.8万,康定文旅:封闭整改
  • 开局良好,我国第一季度广告业务收入保持较快增速
  • 公安部部署“昆仑2025”专项工作,严打环食药等领域突出犯罪