已解决
【每日一题】切割后面积最大的蛋糕
来自网友在路上 164864提问 提问时间:2023-10-27 05:17:48阅读次数: 64
最佳答案 问答题库648位专家为你答疑解惑
文章目录
- Tag
- 题目来源
- 题目解读
- 解题思路
- 方法一:排序
- 其他语言
- python3
- 写在最后
Tag
【排序】【数组】【2023-10-27】
题目来源
1465. 切割后面积最大的蛋糕

题目解读
切割后面积最大的蛋糕。
解题思路
方法一:排序
本题较为简单,找出最大的宽和高,然后返回乘积即可。为了找出找出最大的宽和高,我们需要计算相邻两条切痕之间的距离(包括边界与最近的切痕之间的距离)。为了便于计算,可以对水平方向和竖直方向的切痕进行排序。具体实现见下方代码。
实现代码
class Solution {
public:int maxArea(int h, int w, vector<int>& horizontalCuts, vector<int>& verticalCuts) {const int MOD = 1e9 + 7;sort(verticalCuts.begin(), verticalCuts.end());sort(horizontalCuts.begin(), horizontalCuts.end());long long width = 0, heigh = 0, prev = 0;for (auto vert : verticalCuts) {width = max(width, vert - prev);prev = vert;}width = max(width, w - prev);prev = 0;for (auto hor : horizontalCuts) {heigh = max(heigh, hor - prev);prev = hor;}heigh = max(heigh, h - prev);long long res = (long long) width * heigh % MOD;return res;}
};
复杂度分析
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn), n n n 为数组 horizontalCuts
和 verticalCuts
的最大长度。
空间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)。
其他语言
python3
class Solution:def maxArea(self, h: int, w: int, horizontalCuts: List[int], verticalCuts: List[int]) -> int:width, heigh, prev = 0, 0, 0mod = 10 ** 9 + 7horizontalCuts.sort()verticalCuts.sort()for vert in verticalCuts:width = max(width, vert - prev)prev = vertwidth = max(width, w - prev)prev = 0for hor in horizontalCuts:heigh = max(heigh, hor - prev)prev = horheigh = max(heigh, h - prev)res = width * heigh % modreturn res
写在最后
如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。
如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。
最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"【每日一题】切割后面积最大的蛋糕":http://eshow365.cn/6-25714-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: java 使用策略模式减少if
- 下一篇: Java学习笔记(三)