Python面试宝典第39题:盛最多水的容器

题目

        给定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。

Python面试宝典第39题:盛最多水的容器_第1张图片

暴力法

        这道题主要考察应聘者将实际问题抽象化,并转化为数学模型的能力。我们最先想到的可能是暴力法,也就是遍历数组两遍。使用暴力法求解本题的主要步骤如下。

        1、在第一遍遍历中,对于每一个垂直线 i (0 ≤ i < n),将其作为容器的左边界。

        2、在第二遍遍历中,对于每一个可能的右边界 j (i+1 ≤ j < n),计算由线 i 和 j 形成的容器的面积。

        3、记录并返回所有这些容器中的最大面积。

        根据上面的算法步骤,我们可以得出下面的示例代码。

def most_water_area_by_brute_force(height):
    max_water = 0
    n = len(height)
    
  

你可能感兴趣的:(Python面试宝典,python,面试,算法,暴力法,双指针法)