LeetCode 1465. 切割后面积最大的蛋糕【贪心,数组,排序】1444

news2024/9/23 11:23:55

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。

为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库:https://github.com/memcpy0/LeetCode-Conquest。在这一仓库中,你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类题目归纳、通用解法总结等,还可以看到原题出现频率和相关企业等重要信息。如果有其他优选题解,还可以一同分享给他人。

由于本系列文章的内容随时可能发生更新变动,欢迎关注和收藏征服LeetCode系列文章目录一文以作备忘。

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

  • horizontalCuts[i] 是从矩形蛋糕顶部到第  i 个水平切口的距离
  • verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口的距离

请你按数组 horizontalCuts 和 verticalCuts 中提供的水平和竖直位置切割后,请你找出 面积最大 的那份蛋糕,并返回其 面积 。由于答案可能是一个很大的数字,因此需要将结果  109 + 7 取余 后返回。

示例 1:

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

示例 2:

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

示例 3:

输入:h = 5, w = 4, horizontalCuts = [3], verticalCuts = [3]
输出:9

提示:

  • 2 <= h, w <= 10^9
  • 1 <= horizontalCuts.length <= min(h - 1, 10^5)
  • 1 <= verticalCuts.length <= min(w - 1, 10^5)
  • 1 <= horizontalCuts[i] < h
  • 1 <= verticalCuts[i] < w
  • 题目数据保证 horizontalCuts 中的所有元素各不相同
  • 题目数据保证 verticalCuts 中的所有元素各不相同

解法 贪心+排序

为了算出两个相邻切口的距离,把 horizontalCuts \textit{horizontalCuts} horizontalCuts verticalCuts \textit{verticalCuts} verticalCuts 从小到大排序。

排序后,任意蛋糕都可以由两个相邻的水平切口和两个相邻的竖直切口决定(边界也算切口)。例如示例 1,水平切口 2 , 4 2,4 2,4 和竖直切口 1 , 3 1,3 1,3 就决定了面积最大的那份蛋糕。

所以蛋糕的面积可以表示为
( horizontalCuts [ i ] − horizontalCuts [ i − 1 ] ) ⋅ ( verticalCuts [ j ] − verticalCuts [ j − 1 ] ) (\textit{horizontalCuts}[i] - \textit{horizontalCuts}[i-1])\cdot (\textit{verticalCuts}[j] - \textit{verticalCuts}[j-1]) (horizontalCuts[i]horizontalCuts[i1])(verticalCuts[j]verticalCuts[j1])
由于相乘的两项是互相独立的,只需要分别算出 horizontalCuts [ i ] − horizontalCuts [ i − 1 ] \textit{horizontalCuts}[i] - \textit{horizontalCuts}[i-1] horizontalCuts[i]horizontalCuts[i1] 的最大值和 verticalCuts [ j ] − verticalCuts [ j − 1 ] \textit{verticalCuts}[j] - \textit{verticalCuts}[j-1] verticalCuts[j]verticalCuts[j1] 的最大值,就得到了蛋糕面积的最大值。

也可以这样理解,先横着切,那么间隔最大的那两刀,就决定了最大的那条蛋糕,它包含着最终面积最大的那份蛋糕。接下来只需要知道竖着切时,两刀的最大间隔是多少,就知道了蛋糕的最大面积。

class Solution {
    int get_max_size(int size, vector<int> &cuts) {
        sort(cuts.begin(), cuts.end());
        int res = max(cuts[0], size - cuts.back());
        for (int i = 1; i < cuts.size(); i++) {
            res = max(res, cuts[i] - cuts[i - 1]);
        }
        return res;
    }
public:
    int maxArea(int h, int w, vector<int> &horizontalCuts, vector<int> &verticalCuts) {
        int max_h = get_max_size(h, horizontalCuts);
        int max_w = get_max_size(w, verticalCuts);
        return (long long) max_h * max_w % 1'000'000'007;
    }
};

复杂度分析:

  • 时间复杂度: O ( n log ⁡ n + m log ⁡ m ) \mathcal{O}(n\log n + m\log m) O(nlogn+mlogm) ,其中 n n n horizontalCuts \textit{horizontalCuts} horizontalCuts 的长度, m m m verticalCuts \textit{verticalCuts} verticalCuts 的长度。瓶颈在排序上。
  • 空间复杂度: O ( n ) \mathcal{O}(n) O(n) O ( 1 ) \mathcal{O}(1) O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1143810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探秘Kafka背后的幕后机关,揭示消息不丢失或重复的原理与实践经验

背景 相信大家在工作中都用过消息队列&#xff0c;特别是 Kafka 使用得更是普遍&#xff0c;业务工程师在使用 Kafka 的时候除了担忧 kafka 服务端宕机外&#xff0c;其实最怕如下这样两件事。 消息丢失。下游系统没收到上游系统发送的消息&#xff0c;造成系统间数据不一致。…

基于springboot实现校园志愿者管理系统项目【项目源码+论文说明】

基于springboot实现校园志愿者管理系统演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;校园志愿者管理系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff…

VMware 16开启虚拟机电脑就蓝屏W11解决方法

问题现象 解决方法 控制面板->程序->启用或关闭windows功能->勾选虚拟机平台->重启

VTKQT 3D交互---[3]降低抬高功能PushAndPull

前言&#xff1a;在医疗的应用中&#xff0c;有时会需要手动去修改模型&#xff0c;比如3-matic软件中的LocalSmoothing和PushAndPull功能。该博文主要记录降低抬高PushAndPull功能。

4 H3C网络设备模拟器

如果大家没有硬件&#xff0c;但是也想做一下组网&#xff0c;可以使用H3C提供的网络模拟器。因为我使用的是mac&#xff0c;所以将软件安装到虚拟机里。安装好之后可以看到如下结构&#xff1a; 交换机工作原理 在使用模拟器前&#xff0c;我们先学习一下交换机的工作原理。 …

深入剖析SQL与NoSQL的优劣势,帮你决定最佳数据存储方案

你是否在为系统的数据库来一波大流量就几乎打满 CPU&#xff0c;日常 CPU 居高不下烦恼?你是否在各种 NoSQL 间纠结不定&#xff0c;到底该选用哪种最好?今天的你就是昨天的我&#xff0c;这也是我写这篇文章的初衷。 作为互联网从业人员&#xff0c;我们要知道关系型数据库…

VMware16,运行虚机后E盘下就会产生一个奇怪的文件夹

问题现象&#xff1a; VMware16&#xff0c;运行虚机后E盘下就会产生一个奇怪的文件夹&#xff0c;是乱码的 问题原因&#xff1a; 虚机安装路径存在中文 解决方法&#xff1a; 删除乱码文件夹 一&#xff1a;是否有中文路径&#xff0c;有的话改为英文路径 二&#xff1…

HED边缘检测

HED边缘检测 HED边缘检测&#xff0c;得到模型后&#xff0c;可以用OPENCV调用&#xff0c;不需要其他依赖&#xff0c;C/PYTHON/ANDROID都可以实现&#xff0c;效果如下&#xff1a;

Ubuntu安装docker,并换镜像源详细教程,建议收藏

文章目录 添加docker官方的GPG密钥将docker仓库添加到apt源安装docker检查docker换源 添加docker官方的GPG密钥 sudo apt-get updatesudo apt-get install ca-certificates curl gnupgsudo install -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux…

GB/T28181流媒体相关协议详解

GB/T28181流媒体相关协议详解 文章目录 GB/T28181流媒体相关协议详解1 GB/T28181协议中使用的应用层协议介绍2 实时视频点播协议交互流程2.1 设备注册2.2 设备保活2.3 视频播放 总结 本文主要主要针对28181协议中视频流的部分&#xff0c;来阐述视频流通过28181协议如何进行视频…

解密RocketMq的运行机制,带你玩转分布式消息通信

一、 MQ背景&选型 消息队列作为高并发系统的核心组件之一&#xff0c;能够帮助业务系统解耦提升开发效率和系统稳定性。主要具有以下优势&#xff1a; 削峰填谷&#xff08;主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题&#xff09;系统解耦&#xf…

Faster R-CNN(2016.1)

文章目录 摘要引言过去计算proposals的算法我们提出的 相关工作Object ProposalsDeep Networks for Object Detection Faster R-CNNRegion Proposal NetworksAnchorsTranslation-Invariant AnchorsMulti-Scale Anchors as Regression References多尺度预测有两种流行的方法我们…

云计算未来展望:边缘计算、量子计算与AI

文章目录 边缘计算&#xff1a;数据处理的新时代应用领域挑战与机遇 量子计算&#xff1a;超越传统计算的新范式量子比特应用前景挑战与机遇 人工智能&#xff1a;云计算的动力云中的AI应用领域挑战与机遇 结语 &#x1f389;欢迎来到云计算技术应用专栏~云计算未来展望&#x…

Vue学习之样式汇总

Vue学习之样式汇总 一 二者左右排版 案例 说明&#xff1a;头部一左一右排版&#xff0c;内容一左一右两个排版&#xff0c;公告栏文字超过点点点显示 代码实现 说明&#xff1a; &#xff08;1&#xff09;头部实现一左一右排版需要使用一下两个样式 display: flex;justify-…

4、QtCharts 做心电图

文章目录 ui界面核心代码全部代码 ui界面 核心代码 void Dialog::slot_timer() {qreal xOffset0.f;//x的偏移量,推进的距离qreal dIncrease10;//增加量//数据for(int i0;i<10;i){m_xdIncrease;xOffsetdIncrease;m_splineSerise->append(m_x,qrand()%10);//根据实际情况删…

IDEA新建maven项目,使用mybatis操作数据库完整过程

IDEA新建maven项目&#xff0c;使用mybatis操作数据库完整过程 一、IDEA新建maven项目二、配置mybatis三、创建表对应实体类四、创建mapper接口五、使用mybatis操作数据库 前提&#xff1a; 这个教程是在maven项目中使用mybatis进行数据库操作&#xff0c;不是在spring boot项目…

51单片机复位电容计算与分析(附带Proteus电路图)

因为iC x (dU/dt).在上电瞬间&#xff0c;U从0变化到U,所以这一瞬间就是通的&#xff0c;然后这就是一个直流回路&#xff0c;因为电容C直流中是断路的&#xff0c;所以就不通了。 然后来分析一下这个电容的电压到底是能不能达到单片机需要的复位电压。 这是一个线性电容&…

听力检测为什么要在标准化的隔声屏蔽系统中进行?

作者兰明&#xff0c;医学硕士&#xff0c;听力学博士&#xff0c;听觉健康门诊主任 美国国家研究委员会;;行为、认知和感官科学委员会联合出版的听力损失确定社会保障福利的资格一书中关于测试环境的要求如下&#xff1a; 行动建议4-4 测试环境 听力学评估是在受控的声学环境中…

基于springboot实现休闲娱乐代理售票平台系统项目【项目源码+论文说明】

基于springboot实现休闲娱乐代理售票系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把休闲娱乐代理售票管理与现在网络相结合&#xff0c;利用java技术建设休闲娱乐代理售票系统&#xff0c;实现休闲娱乐代理售票的信息化。则对于进一步提高休闲娱乐代理售票管理发…

随写 - GPT使用时机

感慨科技的进步&#xff0c;还记得15年的时候初中&#xff0c;需要写一篇什么读后感&#xff0c;东抄西凑一篇500字的语句不通顺的文章交上去&#xff0c;那时候什么文库啥的都不需要会员&#xff0c;直接复制就行了。 现在问一问GPT什么都出来了。 1.EDA设计 由于课程结束&am…