开发公司算法leetcode|11. 盛最多水的容器(rust重拳出击)


文章目录


11. 开发公司盛最多水的容器:

开发公司给定一个长度为 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。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

样例 2:

输入:	height = [1,1]输出:	1
  • 1
  • 2
  • 3
  • 4
  • 5

提示:

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

原题传送门:


分析

  • 面对这道算法题目,二当家的陷入了沉思。
  • 最终放多少水,只和宽度,高度有关。
  • 由于有两个变量,所以很难一下判断如何才能最大。
  • 我们不妨先让一个量最大,这样结果就只和另一个量有关了。
  • 我们先取最左和最右两个端点构成容器,这时候容器的宽度最大,高度只能是两个端点较小的一个,记录下来盛水量。
  • 下一步,我们将较小的一个端点向中间移动,宽度会缩小,所以我们希望能找到更高的端点,如果移动较高的端点,那么容器的高度不会变高,因为被低的那个端点限制了,所以我们应该移动那个低的端点,这样才有希望找到更高的端点,使得容器整体变高。

题解

impl Solution {    pub fn max_area(height: Vec<i32>) -> i32 {        let mut maxArea = 0;        let mut l = 0;        let mut r = height.len() - 1;        while l < r {            let mut area;            if height[l] < height[r] {                area = (r - l) as i32 * height[l];                l += 1;            } else {                area = (r - l) as i32 * height[r];                r -= 1;            }            maxArea = maxArea.max(area);        }        return maxArea;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

go

func maxArea(height []int) int {    maxArea := 0	l := 0	r := len(height) - 1	for l < r {		var area int		if height[l] < height[r] {			area = (r - l) * height[l]			l++		} else {			area = (r - l) * height[r]			r--		}		if area > maxArea {			maxArea = area		}	}	return maxArea}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

c++

class Solution {public:    int maxArea(vector<int>& height) {        int maxArea = 0;        int l = 0, r = height.size() - 1;        while (l < r) {            int area;            if (height[l] < height[r]) {                area = (r - l) * height[l++];            } else {                area = (r - l) * height[r--];            }            maxArea = max(maxArea, area);        }        return maxArea;    }};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

java

class Solution {    public int maxArea(int[] height) {        int maxArea = 0;        int l       = 0, r = height.length - 1;        while (l < r) {            int area;            if (height[l] < height[r]) {                area = (r - l) * height[l++];            } else {                area = (r - l) * height[r--];            }            maxArea = Math.max(maxArea, area);        }        return maxArea;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

typescript

function maxArea(height: number[]): number {    let maxArea = 0;	let l       = 0, r = height.length - 1;	while (l < r) {		let area;		if (height[l] < height[r]) {			area = (r - l) * height[l++];		} else {			area = (r - l) * height[r--];		}		maxArea = Math.max(maxArea, area);	}	return maxArea;};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

python

class Solution:    def maxArea(self, height: List[int]) -> int:        l, r = 0, len(height) - 1        ans = 0        while l < r:            if height[l] < height[r]:                area = (r - l) * height[l]                l += 1            else:                area = (r - l) * height[r]                r -= 1            ans = max(ans, area)        return ans
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 博客原创~


网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发