当前位置: 首页 > 知识库问答 >
问题:

找到最大可能的区域

梁俊智
2023-03-14

给定n个非负整数a1, a2,..., an,其中每个表示坐标(i, ai)处的点。绘制n条垂直线,使得线i的两个endpoint位于(i, ai)和(i,0)。找到两条线,它们与x轴一起构成一个容器,使得容器中包含最多的水。

注意:容器不能倾斜。

一种解决方案可能是我们取每一行并找到每一行的区域。这需要O(n^2)。没有时间效率。

另一种解决方案是使用DP找到每个索引的最大面积,然后在索引n处,我们将得到最大面积。我想是O(n)。

有没有更好的解决方案?

共有3个答案

赵同
2023-03-14

这是一个Java实现:

基本思想是使用前后两个指针,并计算沿途的面积。

public int maxArea(int[] height) {
    int i = 0, j = height.length-1;
    int max = Integer.MIN_VALUE;

    while(i < j){
        int area = (j-i) * Math.min(height[i], height[j]);
        max = Math.max(max, area);
        if(height[i] < height[j]){
            i++;
        }else{
            j--;
        }
    }

    return max;
}
齐朝明
2023-03-14

这里的许多人把这个问题误认为是最大矩形问题,事实并非如此。

解决方案

  1. 删除所有元素aj,以便ai
  1. 查找ai和aj之间的区域并跟踪最大值

复杂度是线性的(O(n))

李宁
2023-03-14
int maxArea(vector<int> &height) {
    int ret = 0;
    int left = 0, right = height.size() - 1;
    while (left < right) {
        ret = max(ret, (right - left) * min(height[left], height[right]));
        if (height[left] <= height[right])
            left++;
        else
            right--;
    }
    return ret;
}
 类似资料:
  • 给定一个数组,求从所有可能的子数组中选择的最小元素和次最小元素的最大和。更正式地说,如果我们写出大小为 这个问题是关于GFG的,但我不理解它的解释。 请任何人给出它在O(n)时间复杂度下的解。

  • 给定一个数组,你必须找到最大可能的两个相等的总和,你可以排除元素。 即给定数组,我们可以有最大两个相等的和,因为6 2=4 3 1 即 4,10,18, 22,我们可以得到两个相等的总和,因为 18 4 = 22 除了蛮力寻找所有计算并检查两个可能的相等和之外,你解决这个问题的方法是什么? 编辑1:数组元素的最大数目为N 编辑2:这是我的解决方案,https://ideone.com/cAbe4g

  • 问题内容: 我正在使用Ubuntu 11.04。如何找出进程的最大调用堆栈大小以及堆栈中每个帧的大小? 问题答案: 您可以使用查询最大进程和堆栈大小。堆栈框架没有固定的尺寸。它取决于每个帧需要多少本地数据(即本地变量)。 要在命令行上执行此操作,可以使用ulimit。 如果要为正在运行的进程读取这些值,我不知道执行此操作的任何工具,但是查询/ proc文件系统很容易:

  • 问题内容: 我试图显示最高平均工资;但是,我似乎无法使其正常工作。 我可以得到要显示的平均薪水清单: 但是,当我尝试显示具有以下项的最大平均薪水列表时: 它没有运行。我收到“无效标识符”错误。如何使用每个工人的平均工资来找到每个工人的最高平均工资? 谢谢。 问题答案: 由聚合函数(例如avg)产生的列通常获得任意名称。只需为其使用别名,然后在其上进行选择:

  • 输入:p=1,r=55,x=5 产量:5 50 从1到55迭代后,如果数字之和=5,则可能的结果将5,14,23,32,41,50因此输出是一个越来越小的结果 我试着做下面的代码,但我正在从键错误中获取索引。我想这是因为此列表中没有添加任何内容。

  • 问题内容: 当然,在32位系统中可以设置的理论最大堆值是字节,但是通常(请参阅:了解最大JVM堆大小 -32 位vs64位),一个人不能使用全部4GB。 对于在64位计算机上的64位OS中运行的64位JVM,除了理论上的字节数限制或16艾字节之外,是否还有其他限制? 我知道由于种种原因(主要是垃圾回收),过大的堆可能不是 明智的选择 ,但是鉴于阅读了有关具有terrabytes RAM的服务器的信