当前位置:首页 > 编程笔记 > 正文
已解决

【每日一题】切割后面积最大的蛋糕

来自网友在路上 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 为数组 horizontalCutsverticalCuts 的最大长度。

空间复杂度: 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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!