Leecode刷题C语言之切蛋糕的最小总开销②

执行结果:通过

执行用时和内存消耗如下:

 

 

 

 

int compare(const void* a, const void* b) {
    return (*(int*)b - *(int*)a);
}

long long minimumCost(int m, int n, int* horizontalCut, int horizontalCutSize, int* verticalCut, int verticalCutSize) {
    qsort(horizontalCut, horizontalCutSize, sizeof(int), compare);
    qsort(verticalCut, verticalCutSize, sizeof(int), compare);
    long long h = 1, v = 1;
    long long res = 0;
    int hIndex = 0, vIndex = 0;
    while (hIndex < horizontalCutSize || vIndex < verticalCutSize) {
        if (vIndex == verticalCutSize || (hIndex < horizontalCutSize && horizontalCut[hIndex] > verticalCut[vIndex])) {
            res += horizontalCut[hIndex++] * h;
            v++;
        } else {
            res += verticalCut[vIndex++] * v;
            h++;
        }
    }
    return res;
}

解题思路:

这段代码的目的是计算将一块矩形面板(尺寸为 m×n)通过水平和垂直切割所需的最小成本。面板可以通过给定数量的水平和垂直切割线来分割。每种切割方式的成本等于切割线长度乘以它所在的较小面板的数量(在切割方向上的面板数量)。下面详细解释这段代码的思路:

  1. 比较函数 compare:
    • 这是一个用于 qsort 排序的比较函数。
    • 它接收两个 const void* 类型的参数 a 和 b,代表要比较的两个元素。
    • 函数通过类型转换将 void* 转换为 int*,然后解引用以获得实际的值。
    • 返回 *(int*)b - *(int*)a,意味着以降序对整数进行排序。
  2. 函数 minimumCost:
    • 参数说明:
      • m 和 n 分别表示矩形面板的宽度和高度。
      • horizontalCut 和 verticalCut 是两个数组,分别存储所有水平切割线和垂直切割线的位置。
      • horizontalCutSize 和 verticalCutSize 分别是 horizontalCut 和 verticalCut 数组的大小。
    • 思路:
      1. 排序切割线:
        • 使用 qsort 函数和 compare 比较函数,分别对水平和垂直切割线进行降序排序。这是为了方便后续遍历和计算。
      2. 初始化变量:
        • h 和 v 分别表示当前面板在水平和垂直方向上的分割数量(初始化为1,因为面板本身就是一个完整的区域)。
        • res 用于存储总成本,初始化为0。
        • hIndex 和 vIndex 分别用于遍历水平和垂直切割线的索引。
      3. 遍历切割线:
        • 使用一个 while 循环,直到所有水平和垂直切割线都被遍历完毕。
        • 在每次迭代中,比较当前遍历到的水平切割线(如果存在)和垂直切割线(如果存在)的位置。
        • 如果当前水平切割线的位置大于或等于当前垂直切割线的位置(或者没有更多的垂直切割线),则处理水平切割线:
          • 将当前水平切割线的位置乘以水平方向上的面板数量 h,并累加到总成本 res 上。
          • 垂直方向上的面板数量 v 增加1(因为添加了一条水平切割线)。
          • 水平切割线索引 hIndex 增加1。
        • 否则,处理垂直切割线:
          • 将当前垂直切割线的位置乘以垂直方向上的面板数量 v,并累加到总成本 res 上。
          • 水平方向上的面板数量 h 增加1(因为添加了一条垂直切割线)。
          • 垂直切割线索引 vIndex 增加1。
      4. 返回结果:
        • 循环结束后,返回总成本 res

这个算法的关键在于通过排序来简化切割线的处理,并使用两个指针(或索引)来同时遍历水平和垂直切割线,确保每次处理的都是当前最短(因为已排序)的切割线,从而得到最小的成本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS的内存管理(选择heap4.c文件的理由)

目录 1. 了解FreeRTOS内存管理 2. 了解内存碎片 3.了解各个heap.c的内存分配方法 1.heap1.c 2.heap2.c 3.heap3.c 4.heap4.c 5.heap5.c 总结&#xff1a; 内存管理是一个系统基本组成部分&#xff0c;FreeRTOS 中大量使用到了内存管理&#xff0c;比如创建任务、信号量…

[服务器][教程]Ubuntu24.04 Server开机自动挂载硬盘教程

1. 查看硬盘ID ls -l /dev/disk/by-uuid可以看到对应的UUID所对应的分区 2. 创建挂载文件夹 创建好文件夹即可 3. 修改配置文件 sudo vim /etc/fstab把对应的UUID和创建的挂载目录对应即可 其中# Personal mount points下面的是自己新添加的 &#xff1a;分区定位&#xff…

Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p38708 分析师&#xff1a;Yuling Fang 信息时代的来临使得企业营销焦点从产品中心转向客户中心&#xff0c;客户关系管理成为企业的核心问题&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 客户关系管理的关键是客…

HTML——46.制作课程表

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>课程表</title></head><body><h3>课程表</h3><table border"1" cellspacing"0"><tr><th colspan"…

强化学习(1)

Reinforcement Learning Goal-directed learing from ineraction with the environment. 1. Basic Element 基本元素 1.1 Agent 玩家 1.2 Environment 1.3 Goal 2. Main Element 主要元素 2.1 State 2.2 Action 状态与行为往复 2.3 Reward 目标&#xff1a;最大化总…

《代码随想录》Day21打卡!

写在前面&#xff1a;祝大家新年快乐&#xff01;&#xff01;&#xff01;2025年快乐&#xff0c;2024年拜拜~~~ 《代码随想录》二叉树&#xff1a;修剪二叉搜索树 本题的完整题目如下&#xff1a; 本题的完整思路如下&#xff1a; 1.本题使用递归进行求解&#xff0c;所以分…

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针

iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针-CSDN博客 类型含义使用场景示例nil表示一个指向 Objective - C 对象的空指针。在 Objective - C 和 Swift&#xff08;与 Objective - C 交互时&#xff09;中用于表示对象不存在。当一个对象变量没有指向任何有效的对象实例…

CPT203 Software Engineering 软件工程 Pt.6 软件管理(中英双语)

文章目录 10. Project Management&#xff08;项目管理&#xff09;10.1 Project Management Overview10.1.1 Project Management Importance&#xff08;项目管理的重要性&#xff09;10.1.2 Criteria for Project Management&#xff08;项目管理的准则&#xff09;10.1.3 Ch…

Java [后端] 开发日常记录(1)

目录 1、常用的注解 2、对字符串的处理 3、对JSON串的处理 -- The End -- 详细如下&#xff1a; 1、常用的注解 若返回的字段中有NUll&#xff0c;则不返回 JsonInclude(value JsonInclude.Include.NON_NULL) //在实体类中添加这个注解 JsonInclude(JsonInclude.Include.NON…

流计算需要框架吗?SPL 可能是更好的选择

流数据源通常是动态、无界的&#xff0c;看起来与静态、有限的批数据源区别较大&#xff0c;传统的数据库技术在架构上难以直接处理流数据源&#xff0c;只能让位于后来者。heron\samza\storm\spark\flink等计算框架最先完成突破&#xff0c;在流计算技术中占得先发优势。这些框…

设计模式の状态策略责任链模式

文章目录 前言一、状态模式二、策略模式三、责任链模式 前言 本篇是关于设计模式中的状态模式、策略模式、以及责任链模式的学习笔记。 一、状态模式 状态模式是一种行为设计模式&#xff0c;核心思想在于&#xff0c;使某个对象在其内部状态改变时&#xff0c;改变该对象的行为…

鸿蒙UI开发——使用WidthTheme实现局部深浅色

1、场景描述 在实际的应用开发中&#xff0c;我们可能需要在界面中局部应用深色或者浅色的界面样式&#xff0c;与全局的深色、亮色同时生效。场景例如&#xff1a;深/亮色预览。此时&#xff0c;我们可以使用WithTheme能力来达到我们的效果。 2、WithTheme WithTheme组件可…

20241231取消掉夸克浏览器为默认浏览器

20241231取消掉夸克浏览器为默认浏览器 2024/12/31 17:59 因为有些资源必须用夸克网盘下载&#xff01;^_ 地区特色问题。对于百度网盘&#xff0c;如果你分享BBC的纪录片合集&#xff0c;马上给你无效掉&#xff01;^_ 但是夸克有一点夜郎自大了&#xff0c;把客户的默认浏览器…

详细教程:SQL2008数据库备份与还原全流程!

数据的安全性至关重要&#xff0c;无论是操作系统、重要文件、磁盘存储&#xff0c;还是企业数据库&#xff0c;备份都是保障其安全和完整性的关键手段。拥有备份意味着即使发生误删、系统崩溃或病毒攻击等问题&#xff0c;也能迅速通过恢复功能解决&#xff0c;避免数据丢失带…

一、Hadoop概述

文章目录 一、Hadoop是什么二、Hadoop发展历史三、Hadoop三大发行版本1. Apache Hadoop2. Cloudera Hadoop3. Hortonworks Hadoop 四、Hadoop优势1. 高可靠性2. 高扩展性3. 高效性4. 高容错性 五、Hadoop 组成1. Hadoop1.x、2.x、3.x区别2. HDFS 架构概述3. YARN 架构概述4. Ma…

docker-开源nocodb,使用已有数据库

使用已有数据库 创建本地数据库 数据库&#xff1a;nocodb 用户&#xff1a;nocodb 密码&#xff1a;xxxxxx修改docker-compose.yml 默认网关的 IP 地址是 172.17.0.1&#xff08;适用于 bridge 网络模式&#xff09;version: "2.1" services:nocodb:environment:…

BetterBench的2024年终总结

回忆录 去年的年末定的2024目标是阅读300篇文献&#xff0c;发表一篇小论文&#xff0c;阅读20本的目标&#xff0c;都没有如期完成。只读了130篇论文&#xff0c;小论文还只写了初稿&#xff0c;还没有投出去&#xff0c;只读了6本书&#xff0c;上半年很浮躁&#xff0c;都没…

编辑音频的基本属性

导入音频 “文件-导入-选择音频”拖到音频轨道创建序列。选择音频&#xff0c;在效果空间可以看到音频的基本属性。 音量的设置 “效果工作区-效果控件-音量”在这里可以控制所有引导的混合音量 静音 静止所有声音 音频仪表 一般位于时间轴的后面&#xff0c;找不到可以…

SQL 基础教程 - SQL SELECT 语句

SQL SELECT DISTINCT 语句 SELECT DISTINCT 语句用于返回唯一不同的值。 在表中&#xff0c;一个列可能会包含多个重复值&#xff0c;有时您也许希望仅仅列出不同&#xff08;distinct&#xff09;的值。 DISTINCT 关键词用于返回唯一不同的值。 SQL SELECT DISTINCT 语法 …

Oracle 回归分析函数使用

Oracle 回归分析函数使用 文章目录 Oracle 回归分析函数使用什么是 回归分析函数回归分析函数示例1. 分析 SAL 和 COMM 之间的回归关系2. 按部门分析 SAL 和 COMM 的关系3. 根据 SAL 预测 COMM4. 分析员工薪资与工作年限的关5. 按部门分析工作年限与薪资的关系6. 计算 REGR_AVG…