美文网首页
11.盛最多水的容器

11.盛最多水的容器

作者: 夜空中最亮的星_6c64 | 来源:发表于2018-12-13 20:08 被阅读0次

题目描述:

示例:

输入: [1,8,6,2,5,4,8,3,7]
输出: 49

解答1:暴力破解法:

public static int maxArea(int[] height) {
        int max = 0;
        //直接暴力,注意取值边界
        for (int i = height.length - 1; i > 0; i--) {
            for (int j = i - 1; j >= 0; j--) {
                //巧用Math.max()存储不断变化的最大值
                max = Math.max(max, (i - j) * (Math.min(height[j], height[i])));
            }
        }
        return max;
    }

解答2:双指针法:

public static int maxArea1(int[] height) {
        //定义左右双指针
        int left=0,right=height.length-1,area=0,min=0;
        while(left>=0&&right<height.length&&left<right){
            //巧用 Math.min()和Math.max()函数
            //得到最小高度
            min=Math.min(height[left], height[right]);
            //得到最大面积
            area=Math.max(area,(right-left)*min);
            //不论左右,保持较长高度不变,即较短指针向较长指针靠拢。左侧低:左侧指针+1;右侧低:右侧指针-1
            if (min==height[left]) {
                left++;
            }
            else {
                right--;
            }
        }
        return area;
    }

注意:

1.巧用 Math.min()和Math.max()函数,存储不断变化的最大/最小值。
2.但不确定循环次数时,使用while循环,和双指针++(自增两个链表合一;字符串下标左右对称/变化)。

相关文章

网友评论

      本文标题:11.盛最多水的容器

      本文链接:https://www.haomeiwen.com/subject/enzbhqtx.html