• 算法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

    原题传送门:

    https://leetcode.cn/problems/container-with-most-water/description/


    分析

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

    题解

    rust

    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

    非常感谢你阅读本文~
    欢迎【点赞】【收藏】【评论】~
    放弃不难,但坚持一定很酷~
    希望我们大家都能每天进步一点点~
    本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


  • 相关阅读:
    KMP算法
    众多mock工具,这一次我选对了
    配置Linux
    java基于springboot+vue的小区物业报修车位管理系统 elementui
    一致性检验-简单Kappa
    07【SpringMVC常用注解】
    gitLab上传项目代码
    Loongnix-server中ovirt-engine-4.4安装及使用方法
    JavaScript对象和函数——JavaScript筑基
    《人月神话》小结
  • 原文地址:https://blog.csdn.net/leyi520/article/details/127788233