【刷题】盛最多水的容器

简介: 【刷题】盛最多水的容器

题目描述


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

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

返回容器可以储存的最大水量。


说明:你不能倾斜容器。


示例


示例 1:


微信图片_20221112161206.jpg


输入:[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 <= 105 0 <= height[i] <= 104

解题思路


  1. 看到这题脑子里的第一反应是,如果最左和左右边都是最高的,那么盛水量最大。退一步思考,越是靠近两端的线高,盛水越多。
  2. 咱们就可以顺着这个思路来实现,即假设两边最高能盛水最多,再依次像内递进,如果里面的线更高,则说明外面的线不是最高的。
  3. 但是期间我遇到了通过率的问题,于是刷了力扣的题解,发现双指针是很好的思路,我之所以有通过率的问题是因为没有考虑到:相同高度时两边的距离越远越好
  4. 还有性能方面的优化:面积的计算受制于较短边,所以我们在利用双指针计算面试时,可以减少不必要的运算,即:向内移动较短边。


AC代码


func maxArea(height []int) int {
  i := 0
  j := len(height) - 1
  var ret int
  for i < j {
        var area int
    if height[i] > height[j]{
      area = (j-i)* height[j]
    }else {
      area = (j-i)* height[i]
    }
    if area > ret {
      ret = area
    }
    if height[i] < height[j] {
      i++
    }else {
      j--
    }
  }
  return ret
}


运行结果


微信图片_20221112161209.jpg

相关文章
|
存储 容器
LeetCode刷题---11. 盛最多水的容器(双指针-对撞指针)
LeetCode刷题---11. 盛最多水的容器(双指针-对撞指针)
|
Python 容器
【Leetcode刷题Python】11. 盛最多水的容器
解决LeetCode "盛最多水的容器" 问题的Python实现代码,使用了双指针的方法来找出能够容纳最多水的两条线。代码中定义了两个指针i和j,分别从数组的两端向中间遍历,通过计算两个指针所指高度的较小值与它们之间的距离的乘积来更新最大面积res。
353 0
|
算法 Java C++
【数据结构和算法】盛最多水的容器
给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和(i, height[i])。 找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。
242 2
【数据结构和算法】盛最多水的容器
|
容器
11. 盛最多水的容器
11. 盛最多水的容器
222 1
|
容器
leetcode代码记录(盛最多水的容器
leetcode代码记录(盛最多水的容器
207 1
|
自然语言处理 Rust 算法
【算法】11. 盛最多水的容器(多语言实现)
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明: 你不能倾斜容器。
【算法】11. 盛最多水的容器(多语言实现)
|
容器
【力扣】11. 盛最多水的容器
【力扣】11. 盛最多水的容器
253 1
|
算法 测试技术 程序员
力扣经典150题解析之二十八:盛最多水的容器
力扣经典150题解析之二十八:盛最多水的容器
366 0
|
容器
11.盛最多水的容器
11.盛最多水的容器
198 0
|
算法 容器
【LeetCode刷题】快乐数、盛水最多的容器
【LeetCode刷题】快乐数、盛水最多的容器
306 0