盛水最多的容器

题目:给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
来源:https://leetcode-cn.com/problems/container-with-most-water/

法一:双指针法

思路:由于是求最大的存水面积,易知影响存水面积S的只有两个变量即容器的宽和高,故可以遍历所有的宽和高,但这样算法较为复杂,可以先把宽设为最大,即将指针指向两端,再逐步移动指针使宽减小,每次移动均移动高较小的那个。

class Solution:
    def maxArea(self, height) -> int:

        i, j, res = 0, len(height) - 1, 0
        while i < j:
            if height[i] < height[j]:
                res = max(res, height[i] * (j - i))
                i += 1
            else:
                res = max(res, height[j] * (j - i))

        j -= 1
        return res

if __name__ == ‘__main__‘:
    duixiang = Solution()

    ww = duixiang.maxArea([1,8,6,2,5,4,8,3,7])
    print(‘结果是:‘, ww)

原文地址:https://www.cnblogs.com/xxswkl/p/11382031.html

时间: 2024-10-08 16:04:12

盛水最多的容器的相关文章

LeetCode第11题 盛水最多的容器

/* 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) . 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0). 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水. 说明:你不能倾斜容器,且 n 的值至少为 2.*/ 思路: 类似于木桶效应. 每次移动较短的线,保持长线不动.(如果短线不动而长线动,容量减小(y没有增大反而x变小)) 记录最大值. 1 class Solution11 { 2 3 pu

leetcode 盛水最多的容器(双指针)

给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水. 说明:你不能倾斜容器,且 n 的值至少为 2. 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7].在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49. 示例: 输入: [1,8,6,2,5,4,8,3,7]输出: 49 来源

leetcode 11盛水最多的容器

class Solution { public: int maxArea(vector<int>& height) { //双指针法:从最宽的容器开始计算,当更窄的容器盛水量要大于之前容器,那必须比之前容器高,因此可以移动两个指针,直到最窄time O(n),space O(1); int low=0; int high=height.size()-1; int volume=0; while(low<high){ int h=min(height[low],height[hig

[leetcode]11. Container With Most Water存水最多的容器

Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a contain

容器盛水问题

一.问题描述 给定一数组ary,元素两两组合,以min{ary[i],ary[j]}为高,以跨度(j-i)为宽可组成一个容器,求所有这样的容器的最大面积maxVolume. 二.算法分析 以数组ary为例:int[] ary = {3,2,6,8,1,7};如果从蛮力法的角度来看.相当于从以上6个元素中选两个不考虑排序,是组合问题.C(n,m) = C(6,2) = 15不难想到,遍历15种组合的volume值,然后取其最大值,定能够求解.但是我们真的需要求15中全部的情况吗?从另一个角度看来有

11. Container With Most Water 装水最多的容器

[抄题]: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a co

Leetcode medium难度顺序题解

被迫重操旧业(?) 再不刷题面试就真要翻车了.... 好在medium题难度还比较水,幸亏它不考什么神DP或数据结构或blabla不然我还面个锤子(x) 但是现场写代码还不准出错ATP顶8住啊所以还是练练手感叭.... 就,按顺序随便做几个.点中等难度然后按题号排序这样. 2. 两数相加 高精度但是用单向链表. 一开始ATP写的很麻烦,基本思路是先把两个数字重叠的部分相加,然后再单独处理较长的数字多出来的那部分,然后再处理进位这样.一共三个while循环. 但是后来发现好像直接改一下判断条件,如

算法训练营

概念:算法与数据结构相辅相成 算法是为了解决某一个具体的问题,提出来的一个解法 数据结构是为了支撑这次解法,所提出的一种存储结构 1.两数之和(LeetCode1) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] =

【LeetCode】【Python题解】Container with most water

这道题真真是在面试中碰到过,可惜当时复杂度到O(n2)了,太挫了,怪不得没有通过面试. Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines,