切割后面积最大的蛋糕

news2024/11/16 20:29:29

切割后面积最大的蛋糕

题记:

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

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

请你按数组 horizontalCutsverticalCuts 中提供的水平和竖直位置切割后,请你找出 面积最大 的那份蛋糕,并返回其 面积 。由于答案可能是一个很大的数字,因此需要将结果 10^9 + 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 中的所有元素各不相同

题目来源: https://leetcode.cn/problems/maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/description/

解题方法:

思路:分别找到水平和竖直两两相差距离最大的值,返回最大乘积(面积)的结果即可

代码如下:

class Solution {

    /**
     * @param Integer $h
     * @param Integer $w
     * @param Integer[] $horizontalCuts
     * @param Integer[] $verticalCuts
     * @return Integer
     */
    function maxArea($h, $w, $horizontalCuts, $verticalCuts) {
        //找到水平切口距离差最大值
        $max_h = [];
        sort($horizontalCuts);  //升序排序水平切口坐标数组
        for ($i = 0; $i < count($horizontalCuts); $i++) {
            if(($i+1) < count($horizontalCuts)){
                $max_h[$i] = $horizontalCuts[$i+1] - $horizontalCuts[$i];   //找到每两两相邻相差的值
            }
        }
        sort($max_h);   //升序排序
        $h_max_value = end($max_h); //找到相差最大值
        $h_start = $horizontalCuts[0];  //第一个水平切口到原点的距离
        $h_end = $h - end($horizontalCuts); //蛋糕的高度与最后一个水平切口的距离
        $h_real_max_value = max($h_start,$h_end);
        $h_real_max_value = max($h_real_max_value,$h_max_value);    //找到真实的水平切口最大距离差值

        //找到竖直切口距离差最大值
        $max_v = [];
        sort($verticalCuts);    //升序排序竖直切口坐标数组
        for ($i = 0; $i < count($verticalCuts); $i++){
            if(($i + 1) < count($verticalCuts)){
                $max_v[$i] = $verticalCuts[$i + 1] - $verticalCuts[$i];     //找到每两两相邻相差的值
            }
        }
        sort($max_v);   //升序排序
        $v_max_value = end($max_v); //找到相差最大值
        $v_start = $verticalCuts[0];    //第一个竖直切口到原点的距离
        $v_end = $w - end($verticalCuts);   //蛋糕的宽度与最后一个竖直切口的距离
        $v_real_max_value = max($v_start,$v_end);
        $v_real_max_value = max($v_real_max_value,$v_max_value);    //找到真实的竖直切口最大距离差值

        return ($h_real_max_value * $v_real_max_value) % (1e9 + 7);     //返回最大切口面积
    }
}

$h = 5; 
$w = 4; 
$horizontalCuts = [1,2,4]; 
$verticalCuts = [1,3];
$s = new Solution();
$res = $s->maxArea($h, $w, $horizontalCuts, $verticalCuts);
print_r($res);

//输出示例:4

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

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

相关文章

探秘Spring的设计精髓,深入解析架构原理

序员与平庸的程序员之间的区别&#xff0c;是在于认为自己的代码重要还是数据结构更加重要。平庸的程序员眼里只有代码&#xff0c;优秀的程序员则关注数据结构及之前的关系。” 1、spring的设计理念 spring提供了一个轻量级的开发框架&#xff0c;抽象了实际开发中的很多共…

解决大模型“裸”奔,恒生打通落地金融“最后一公里”

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化的21世纪&#xff0c;技术的每一次进步都能引发行业的巨大变革。进入2023年&#xff0c;大模型无疑是金融数智化升级的关键变革力量。无论是高频交易、风险管理&#xff0c;还是金融咨询和客户服务&#xff0c;大模型都…

【Linux】虚拟机项目部署与发布

目录 一、Linux部署单机项目 1.1 优缺点 1.2 将项目共享到虚拟机 1.3 解压后将war包放入tomcat 1.4 数据库导入脚本 1.5 Tomcat启动项目 二、部署前后端分离项目 2.1 准备工作 2.2 部署SPA项目 2.2.1 nginx反向代理 2.2.2 SPA项目宿主机访问 一、Linux部署单机项目…

【Unity精华一记】特殊文件夹

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

CMMI/ASPICE认证咨询及工具服务

服务概述 质量专家戴明博士的名言“如果你不能描述做事情的过程&#xff0c;那么你不知道你在做什么”。过程是连接有能力的工程师和先进技术的纽带&#xff0c;因此产品开发过程直接决定了产品的质量和研发的效率。 经纬恒润可结合多体系要求&#xff0c;如IATF16949\ISO26262…

S7-200 SMART与ABB ACS580变频器进行MODBUS RTU通信的具体方法示例

S7-200 SMART与ABB ACS580变频器进行MODBUS RTU通信的具体方法示例 1. ABB ACS580变频器一侧的设置:

[17]JAVAEE-HTTP协议

目录 一、什么是HTTP协议 什么时候会用到HTTP协议&#xff1f; HTTP协议的工作流程 二、HTTP的报文格式 抓包 HTTP请求报文格式 1.首行 2.header 常见键值对&#xff1a; 3.空行 4.正文&#xff08;body&#xff09;&#xff08;有的时候可以没有&#xff09; HTTP…

数据挖掘神器Orange初步使用

文章目录 安装示例项目展示鸢尾花数据 安装 可以在官网下载&#xff0c;地址为Orange&#xff0c;如果已经装了Anaconda&#xff0c;则可在Anaconda Navigator中找到一个非常猥琐的图标&#xff0c;下面写着Orange3&#xff0c;可以点击Install&#xff0c;装完之后点Launch就…

软考系统架构师知识点集锦六:项目管理

一、考情分析 二、考点精讲 2.1进度管理(时间管理) 进度管理:为了确保项目按期完成所需要的管理过程。 2.1.1过程 [WBS分解的基本要求] WBS的工作包是可控和可管理的&#xff0c;不能过于复杂。任务分解也不能过细&#xff0c;一般原则WBS的树形结构不超过6层。每个工作包要…

文件上传预览下载

文件上传的表单必须满足三个条件: 1.表单组件标签只能用:<input type"file" value"xxx">会自动弹框让用户选择文件 2.请求方式只能用post 3.表单编码格式只能用:mutipart/form-data 根据HTTP协议规定,浏览器每次向后台提交参数,都会对参数进行统一…

selenium工作原理和反爬分析

一、 Selenium Selenium是最广泛使用的开源Web UI(用户界面)自动化测试套件之一&#xff0c;支持并行测试执行。Selenium通过使用特定于每种语言的驱动程序支持各种编程语言。Selenium支持的语言包括C#&#xff0c;Java&#xff0c;Perl&#xff0c;PHP&#xff0c;Python和Ru…

编程实例:多人同时计时计费管理系统软件,可适用于钓场计时等管理

编程实例&#xff1a;多人同时计时计费管理系统软件&#xff0c;可适用于钓场计时等管理 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502 1、使用该编程工具开发的多人计时计…

Kafka - 3.x 副本不完全指北

文章目录 kafka 副本的基本信息Leader选举过程Kafka Controllerkafka 分区副本Leader的选举流程实际演示① 查看first的详细信息&#xff0c;注意观察副本分布情况② 停掉hadoop103上的kafka进程③ 再次查看first的相信信息&#xff0c;观察副本分布④ 处理分区leader分布不均匀…

吴恩达《机器学习》1-4:无监督学习

一、无监督学习 无监督学习就像你拿到一堆未分类的东西&#xff0c;没有标签告诉你它们是什么&#xff0c;然后你的任务是自己找出它们之间的关系或者分成不同的组&#xff0c;而不依赖于任何人给你关于这些东西的指导。 以聚类为例&#xff0c;无监督学习算法可以将数据点分成…

第八节——Vue渲染列表+key作用

一、列表渲染 vue中使用v-for指令进行列表 <template><div><!-- item 代表 当前循环的每一项 --><!-- index 代表 当前循环的下标--><!-- 注意&#xff1a;必须要加key--><div v-for"(item, index) in arr" :key"index"…

vue源码分析(三)——new Vue 的过程(详解data定义值后如何获取的过程)

文章目录 零、准备工作1.创建vue2项目2.修改main.js 一、import Vue from vue引入的vue是哪里来的&#xff08;看导入node_modules包&#xff09;1&#xff1a; 通过node_modules包的package.json文件2&#xff1a; 通过配置中的main入口文件进入开发环境的源码&#xff08;1&a…

MySQL数据库——视图的更新、视图作用以及案例

目录 视图的更新 介绍 示例 视图作用 案例 视图的更新 介绍 要使视图可更新&#xff0c;视图中的行与基础表中的行之间必须存在一对一的关系。 如果视图包含以下任何一项&#xff0c;则该视图不可更新&#xff1a; 聚合函数或窗口函数&#xff08;SUM()、MIN()、MAX()…

体外循环手术中循环管路灌注流量精密自动控制解决方案

摘要&#xff1a;在目前的体外循环手术过程中&#xff0c;需要灌注师快速而精确地操作使得血液流速调节到期望的目标值。基于国外文献报道的血流量自动控制方法和装置&#xff0c;本文提出了技术改进且国产化解决方案。通过本解决方案中增加的国产系列电控夹管阀、电控针阀和具…

C++之特殊类的设计

目录 一、单例模式 1、设计模式 2、单例模式 1、饿汉模式 2、懒汉模式 3、单例对象的释放问题 二、设计一个不能被拷贝的类 三、设计一个只能在堆上创建对象的类 四、设计一个只能在栈上创建对象的类 五、设计一个不能被继承的类 一、单例模式 1、设计模式 概念&am…

RabbitMQ如何保证消息不丢失呢?

RabbitMQ 是一个流行的消息队列系统&#xff0c;用于在分布式应用程序之间传递消息。要确保消息不会丢失&#xff0c;可以采取以下一些措施&#xff1a; 持久化消息&#xff1a; RabbitMQ 允许你将消息标记为持久化的。这意味着消息将被写入磁盘&#xff0c;即使 RabbitMQ 服务…