2023-10-27 leetcode 每日一题 切割后面积最大的蛋糕

题目内容

矩形蛋糕的高度为 h 且宽度为 w,给你两个整数数组 horizontalCuts 和 verticalCuts,其中:

horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离
verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口的距离
请你按数组 horizontalCuts 和 verticalCuts 中提供的水平和竖直位置切割后,请你找出 面积最大 的那份蛋糕,并返回其 面积 。由于答案可能是一个很大的数字,因此需要将结果 对 109 + 7 取余 后返回。

示例 :

示例 1:
2023-10-27 leetcode 每日一题 切割后面积最大的蛋糕_第1张图片

输入:h = 5, w = 4, horizontalCuts = [1,2,4], verticalCuts = [1,3] 输出:4 解释:上图所示的矩阵蛋糕中,红色线表示水平和竖直方向上的切口。切割蛋糕后,绿色的那份蛋糕面积最大。

提示:

2023-10-27 leetcode 每日一题 切割后面积最大的蛋糕_第2张图片

标签

贪心
数组
排序

思路解析贪心:

 * 由题目可得矩形宽的极限值是0->w,高的极限是0->h,按数组 horizontalCuts 和 verticalCuts 切割后,每条切割后的
 * 高度数值都能和切割后的宽度数值对应。,比如示例1 切割完的高度分别为1(0->1),1(1->2),2(2->4),1(4->5)
 *切割完的宽度为1(0->1),2(1->3),1(3->4),能分别组成12个矩形,
 *其中最大的是2(2->4)和2(1->3)组成的面积为4的矩形
 *所以只要获取最大的长和最大的宽相乘,就可以获取面积最大的矩形
     private Integer MOD = 1000000007;
     public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
        Arrays.sort(horizontalCuts);
        Arrays.sort(verticalCuts);
        //获取最大的长和最大的宽
        return (int) (max(h,horizontalCuts)*max(w,verticalCuts) % MOD);

    }

    private long max(int w, int[] verticalCuts) {
        long max=0;
        for (int i = 0; i < verticalCuts.length; i++) {
            if (i==0)
                max=Math.max(verticalCuts[i]-0,max);
            else
                max=Math.max(verticalCuts[i]-verticalCuts[i-1],max);
            if (i==verticalCuts.length-1)
                max=Math.max(w-verticalCuts[i],max);
        }
        return max;
    }

你可能感兴趣的:(leetcode,每日一题,leetcode,算法,职场和发展)