每日算法-250419
每日算法 - 2024年4月19日
记录今天完成的LeetCode算法题。
1710. 卡车上的最大单元数
题目描述

思路
贪心
解题过程
目标是最大化卡车可以装载的单元总数。根据贪心策略,我们应该优先装载单位体积(每个箱子)包含单元数 (
numberOfUnitsPerBoxi) 最多的箱子。这样可以保证在有限的卡车容量下,获得尽可能多的单元数。
- 排序:将
boxTypes数组按照每个箱子的单元数 (boxType[1]) 进行降序排序。- 遍历装载:遍历排序后的
boxTypes数组。
- 对于每种类型的箱子,检查卡车剩余容量
truckSize。- 如果
truckSize大于等于当前类型箱子的数量 (boxType[0]),则将所有该类型的箱子装上卡车。更新总单元数sum,并减少truckSize。- 如果
truckSize小于当前类型箱子的数量,则只装载truckSize个该类型的箱子。更新总单元数sum,此时卡车已满,可以直接结束遍历。- 返回最终计算得到的总单元数
sum。
复杂度分析
- 时间复杂度:
O(N log N),其中 N 是boxTypes的长度。主要开销在于对boxTypes数组的排序。 - 空间复杂度:
O(log N)或O(N),取决于排序算法使用的额外空间(例如,Java中Arrays.sort对对象数组通常使用归并排序或TimSort,可能需要 O(N) 的空间,或优化后接近 O(log N) 的递归栈空间)。
代码实现
class Solution {public int maximumUnits(int[][] boxTypes, int truckSize) {// 按一维数组第二个元素对二维数组进行降序排序Arrays.sort(boxTypes, (arr1, arr2) -> Integer.compare(arr2[1], arr1[1]));int sum = 0;for (int[] boxType : boxTypes) {if (truckSize >= boxType[0]) {sum += (boxType[0] * boxType[1]);} else {sum += (truckSize * boxType[1]);break;}truckSize -= boxType[0];}return sum;}
}
1338. 数组大小减半
题目描述

思路
贪心
解题过程
题目要求我们返回一个整数集合的最小大小,使得移除数组中所有属于该集合的整数后,数组的大小至少减半。根据贪心策略,我们应该优先移除出现次数最多的整数。每次移除当前频率最高的整数,可以最快地减少数组的元素数量,从而用最少的整数种类达到减半的目标。
- 统计频率:使用哈希表(
HashMap)统计数组arr中每个整数的出现次数。- 提取频率:将哈希表中所有不同的频率值提取到一个新的数组
values中。- 排序频率:对
values数组进行升序排序。- 贪心选择:初始化目标移除数量
n = arr.length / 2和结果集合大小ret = 0。从values数组的末尾(即最大频率)开始向前遍历。
- 在每一步中,将当前频率
values[i]从n中减去,表示移除了这么多元素。- 同时,将
ret加 1,表示选择了一个新的整数加入到移除集合中。- 当
n小于等于 0 时,说明移除的元素总数已达到或超过数组长度的一半,此时的ret就是所需的最小集合大小,停止遍历。- 返回
ret。
复杂度分析
- 时间复杂度:
O(N log N)。统计频率需要O(N)。将频率存入数组并排序需要O(M log M),其中 M 是数组中不同元素的数量(M <= N)。在最坏情况下M接近N,所以总体复杂度为O(N log N)。 - 空间复杂度:
O(N)。哈希表和存储频率的数组values在最坏情况下可能需要存储N或接近N个条目/元素。
代码实现
class Solution {public int minSetSize(int[] arr) {Map<Integer, Integer> hash = new HashMap<>();for (int x : arr) {hash.put(x, hash.getOrDefault(x, 0) + 1);}int size = hash.size();int[] values = new int[size];int index = 0;for (int x : hash.values()) {values[index++] = x;}Arrays.sort(values);int n = arr.length / 2, ret = 0;for (int i = size - 1; i >= 0; i--) {n -= values[i];ret++;if (n <= 0) {break;}}return ret;}
}
3010. 将数组分成最小总代价的子数组 I
题目描述

思路
贪心
解题过程
题目要求将数组
nums分成三个非空子数组,并最小化这三个子数组的第一个元素之和(即总代价)。
- 固定第一个元素:根据规则,第一个子数组必须从
nums[0]开始,所以nums[0]必然是总代价的一部分。- 寻找最小的另外两个元素:我们需要确定第二和第三个子数组的起始元素,使得它们的和加上
nums[0]最小。这两个起始元素必须来自nums数组中索引 1 到n-1的部分。为了使总代价最小,我们只需要在nums[1]到nums[n-1]这个范围内找到两个值最小的元素即可。- 贪心选择:由于子数组可以只有一个元素,我们可以将
nums[1]到nums[n-1]中最小的两个元素分别作为第二和第三个子数组的(唯一)元素。这样它们的代价就是这两个最小值。- 实现:因此,最优策略是:
- 保留
nums[0]作为代价的一部分。- 对数组
nums从索引 1 到nums.length - 1的部分进行升序排序。- 总代价就是
nums[0]加上排序后子数组的前两个元素,即nums[0] + nums[1] + nums[2](这里的nums[1]和nums[2]是排序后的结果)。
复杂度分析
- 时间复杂度:
O(N log N),其中 N 是nums的长度。主要开销在于对nums数组从索引 1 开始的子数组进行排序。 - 空间复杂度:
O(log N)或O(N),取决于排序算法使用的额外空间。
代码实现
class Solution {public int minimumCost(int[] nums) {Arrays.sort(nums, 1, nums.length);return nums[0] + nums[1] + nums[2];}
}
相关文章:
每日算法-250419
每日算法 - 2024年4月19日 记录今天完成的LeetCode算法题。 1710. 卡车上的最大单元数 题目描述 思路 贪心 解题过程 目标是最大化卡车可以装载的单元总数。根据贪心策略,我们应该优先装载单位体积(每个箱子)包含单元数 (numberOfUnitsPerB…...
PDF转excel+json ,vue3+SpringBoot在线演示+附带源码
在线演示地址:Vite Vuehttp://www.xpclm.online/pdf-h5 源码gitee前后端地址: javapdfexcel: javaPDF转excelhttps://gitee.com/gaiya001/javapdfexcel.git 盖亚/vuepdfhttps://gitee.com/gaiya001/vuepdf.git 后续会推出 前端版本跟nestjs版本 识别复…...
如何高效使用 Text to SQL 提升数据分析效率?四个关键应用场景解析
数据分析师和业务人员常常面临这样的困境:有大量数据等待分析,但 SQL 编写却成为效率瓶颈。即使对于经验丰富的数据分析师来说,编写复杂 SQL 查询也需要耗费大量时间;而对于不具备 SQL 专业知识的业务人员,数据分析则更…...
分享一个DeepSeek+自建知识库实现人工智能,智能回答高级用法。
这个是我自己搞的DeepSeek大模型自建知识库相结合到一起实现了更强大的回答问题能力还有智能资源推荐等功能。如果感兴趣的小伙伴可以联系进行聊聊,这个成品已经有了实现了,所以可以融入到你的项目,或者毕设什么的还可以去参加比赛等等。 1.项…...
突破速率瓶颈:毫米波技术如何推动 5G 网络迈向极限?
突破速率瓶颈:毫米波技术如何推动 5G 网络迈向极限? 引言 5G 网络的普及,已经让我们告别了“加载中”时代,实现了更快的数据传输、更低的延迟和更高的设备连接密度。而在 5G 技术的核心中,毫米波(mmWave&…...
jangow靶机笔记(Vulnhub)
环境准备: 靶机下载地址: https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova kali地址:192.168.144.128 靶机(jangow)地址:192.168.144.180 一.信息收集 1.主机探测 使用arp-scan进行主机探…...
PyTorch `flatten()` 和 `squeeze()` 区别
PyTorch flatten() 和 squeeze() 区别 在 PyTorch 里,flatten() 和 squeeze(0) 是两个不同的张量操作, 1. flatten() 方法 flatten() 方法用于把一个多维张量展开成一维张量。它会将张量里的所有元素按顺序排列成一个一维序列。 语法 torch.flatten(input, start_dim=...
洛谷P1312 [NOIP 2011 提高组] Mayan 游戏
题目 #算法/进阶搜索 思路: 根据题意,我们可以知道,这题只能枚举,剪枝,因此,我们考虑如何枚举,剪枝. 首先,我们要定义下降函数down(),使得小木块右移时,能够下降到最低处,其次,我们还需要写出判断函数,判断矩阵内是否有小木块没被消除.另外,我们还需要消除函数,将矩阵内三个相连…...
thinkphp6 + oracle 数据库连接 表名、字段名大小写和字符集
之前一直用tp6连接的都是mysql数据,近期一个项目需要连接oracle数据,理论上thinkphp是支持oracle数据库的,但是由于oracle的数据库编码方式和字段表名大小写与mysql不一样。首先oracle的表名默认是全大写的,可是如果使用tp6连接的…...
wordpress SMTP配置qq邮箱发送邮件,新版QQ邮箱授权码获取方法
新版的QQ邮箱界面不同了,以下是新版的设置方法: 1. 进入邮箱后,点右上角的设置图标: 2. 左下角的菜单里,选择“账号与安全” : 3. 然后如下图,开启SMTP 服务: 4. 按提示验证短信&am…...
Django 实现服务器主动给客户端发送消息的几种常见方式及其区别
Django Channels 原理 :Django Channels 是 Django 的一个扩展,它通过使用 WebSockets 等协议来处理长连接,使服务器能够与客户端建立持久连接,从而实现双向通信。一旦连接建立,服务器可以随时主动向客户端发送消息。…...
2025年最新版 Git和Github的绑定方法,以及通过Git提交文件至Github的具体流程(详细版)
文章目录 Git和Github的绑定方法与如何上传至代码仓库一. 注册 GitHub 账号二.如何创建自己的代码仓库:1.登入Github账号,完成登入后会进入如下界面:2.点击下图中红色框选的按钮中的下拉列表3.选择New repostitory4.进入创建界面后࿰…...
基于LSTM-AutoEncoder的心电信号时间序列数据异常检测(PyTorch版)
心电信号(ECG)的异常检测对心血管疾病早期预警至关重要,但传统方法面临时序依赖建模不足与噪声敏感等问题。本文使用一种基于LSTM-AutoEncoder的深度时序异常检测框架,通过编码器-解码器结构捕捉心电信号的长期时空依赖特征&#…...
JavaScript中的Event事件对象详解
一、事件对象(Event)概述 1. 事件对象的定义 event 对象是浏览器自动生成的对象,当用户与页面进行交互时(如点击、键盘输入、鼠标移动等),事件触发时就会自动传递给事件处理函数。event 对象包含了与事件…...
极狐GitLab 用户 API 速率限制如何设置?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 用户 API 速率限制 (BASIC SELF) 您可以为对 Users API 的请求配置每个用户的速率限制。 要更改速率限制: 1.在…...
王牌学院,25西电通信工程学院(考研录取情况)
1、通信工程学院各个方向 2、通信工程学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、信息与通信工程25年相较于24年上升5分、军队指挥学25年相较于24年上升30分 2、新一代电子信息技术(专硕)25年相较于24年下降25分、通信工程&…...
深入理解 Java 多线程:锁策略与线程安全
文章目录 一、常见的锁策略1. 乐观锁&&悲观锁2. 读写锁3. 重量级锁&&轻量级锁4. 自旋锁5. 公平锁&&不公平锁6. 可重入锁 && 不可重入锁 二、CAS1. 什么是 CAS2. CAS 是怎么实现的3.CAS 有哪些应用1) 实现原子类2) 实现自旋锁 4. CAS 的 ABA 问…...
Java数据结构——ArrayList
Java中ArrayList 一 ArrayList的简介二 ArrayList的构造方法三 ArrayList常用方法1.add()方法2.remove()方法3.get()和set()方法4.index()方法5.subList截取方法 四 ArrayList的遍历for循环遍历增强for循环(for each)迭代器遍历 ArrayList问题及其思考 前言 ArrayList是一种 顺…...
科学量化AI对品牌产品印象 首个AI印象(AII)指数发布
2025年4月18日,营销传播数据研究领先机构四度传播研究院(SAC),正式推出了量化AI大模型对产品整体印象的AI印象,简称AII(ARTIFICIAL INTELLIGENCE IMPRESSIONS),同时发布了首个“汽车AI印象榜”。为企业和消…...
Python语法系列博客 · 第8期[特殊字符] Lambda函数与高阶函数:函数式编程初体验
上一期小练习解答(第7期回顾) ✅ 练习1:找出1~100中能被3或5整除的数 result [x for x in range(1, 101) if x % 3 0 or x % 5 0]✅ 练习2:生成字符串长度字典 words ["apple", "banana", "grape…...
FFmpeg 硬核指南:从底层架构到播放器全链路开发实战 基础
目录 1.ffmpeg的基本组成2.播放器的API2.1 复用器阶段2.1.1 分配解复用上下文2.1.2 文件信息操作2.1.3 综合示例 2. 2 编解码部分2.2.1 分配解码器上下文2.2.2编解码操作2.2.3 综合示例 3 ffmpeg 内存模型3.1 基本概念3.2API 1.ffmpeg的基本组成 模块名称功能描述主要用途AVFo…...
大数据建模与评估
文章目录 实战案例:电商用户分群与价值预测核心工具与库总结一、常见数据挖掘模型原理及应用(一)决策树模型(二)随机森林模型(三)支持向量机(SVM)模型(四)K - Means聚类模型(五)K - Nearest Neighbors(KNN)模型二、运用Python机器学习知识实现数据建模与评估(一…...
UE5有些场景的导航生成失败解决方法
如果导航丢失,就在项目设置下将: 即可解决问题: 看了半个小时的导航生成代码发现,NavDataSet这个数组为空,导致异步构建导航失败。 解决 NavDataSet 空 无法生成如下: 当 NavDataSet 为空的化 如果 bAut…...
MCP(Model Context Protocol 模型上下文协议)科普
MCP(Model Context Protocol,模型上下文协议)是由人工智能公司 Anthropic 于 2024年11月 推出的开放标准协议,旨在为大型语言模型(LLM)与外部数据源、工具及服务提供标准化连接,从而提升AI在实际…...
健康养生指南
在快节奏的现代生活中,健康养生成为人们关注的焦点。它不仅关乎身体的强健,更是提升生活质量、预防疾病的关键。掌握科学的养生方法,能让我们在岁月流转中始终保持活力。 饮食是健康养生的基础。遵循 “均衡膳食” 原则,每日饮食需…...
Linux系统:进程终止的概念与相关接口函数(_exit,exit,atexit)
本节目标 理解进程终止的概念理解退出状态码的概念以及使用方法掌握_exit与exit函数的用法以及区别atexit函数注册终止时执行的函数相关宏 一、进程终止 进程终止(Process Termination)是指操作系统结束一个进程的执行,回收其占用的资源&a…...
Linux下 文件的查找、复制、移动和解压缩
1、在/var/log目录下创建一个hehe.log的文件,其文件内容是: myhostname ghl mydomain localdomain relayhost [smtp.qq.com]:587 smtp_use_tls yes smtp_sasl_auth_enable yes smtp_sasl_security_options noanonymous smtp_sasl_tls_security_opt…...
C语言学习之预处理指令
目录 预定义符号 #define的应用 #define定义常量 #define定义宏 带有副作用的宏参数 宏替换的规则 函数和宏定义的区别 #和## #运算符 ##运算符 命名约定 #undef 编辑 命令行定义 条件编译 头文件包含 头文件被包含的方式 1.本地头文件包含 2.库文件包含 …...
【STM32单片机】#10 USART串口通信
主要参考学习资料: B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接:https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装:STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…...
fastlio用mid360录制的bag包离线建图,提示消息类型错误
我用mid360录制的bag包,激光雷达的数据类型是sensor_msgs::PointCloud2,但是运行fast_lio中的mid360 launch文件,会报错(没截图),显示无法从livox_ros_driver2::CustomMsg转换到sensor_msgs::PointCloud2。…...
