贪心算法的基础理论及实践

class Solution
{
    // 面积
    //矩形的长度:两条垂直线的距离
    //矩形的宽度:两条垂直线其中较短一条的长度
    public int maxArea(int[] height) {
        //设置两个指针 left 和 right,分别指向数组的最左端和最右端。 此时,两条垂直线的距离是最远的,
        int l = 0, r = height.length - 1;
        int res = 0;
        while (l < r) {
            // 若要下一个矩形面积比当前面积来得大,
            int lHigh = height[l];
            int rHigh = height[r];
            int area = Math.min(lHigh, rHigh) * (r - l);
            res = Math.max(res, area);
            // 把 height[left] 和 height[right] 中较短的垂直线往中间移动,
            // 看看是否可以找到更长的垂直线。
            if (lHigh <= rHigh) {++l;
            } else {--r;}
            //例子的核心在于:贪心,每次保留最长的边向中间求面积
        }
        return res;
    }
}
Licensed under CC BY-NC-SA 4.0
Last updated on Oct 04, 2024 04:07 UTC
让过去的过去,给时间点时间
Built with Hugo
Theme Stack designed by Jimmy