11.盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

11.盛最多水的容器_第1张图片

 正解之一:使用双指针

class Solution {
    public int maxArea(int[] height) {
        int res = 0;
        int temp = 0;
        int l = 0;
        int r = height.length-1;
        while(l != r){
            if(height[l] > height[r]){
                temp = height[r] * (r-l);
                --r;
            }else {
                temp = height[l] * (r-l);
                l++;
            }
            if(temp > res){
                res = temp;
            }
            temp = 0;
        }
        return res;
    }
}

11.盛最多水的容器_第2张图片

最开始使用数组遍历,尝试比对每种可能性,导致测试用例中,某些较多的数据量,导致超时和超内存。(遇事不决,暴力破解)

因此只能尝试别的方式和思路:题目结果是查找最大的面积,面积只会因为横轴和纵轴的长度有关,横轴的长度是固定的,纵轴的长度,取决于两边板子中较短的一方,因此,当长板子移动时,在不考虑横轴的情况下,面积只有可能变小或者不变,当短板子移动时,则可能变大变小或者不变,因此变量在于短板,因此双指针移动时,要移动短板子。想要面积最大,保证两边的竖线越长约好,两边的竖线距离越远越好,所以最佳的办法就是从两边边界往中间移动

你可能感兴趣的:(每日一题,java,leetcode,开发语言)