当前位置: 首页 > news >正文

【算法】堆排之LCR 159.库存管理 Ⅲ(easy)

 系列专栏

双指针

模拟算法

分治思想


目录

1、题目链接

2、题目介绍

3、解法

选择合适的算法:

实现堆排序:

4、代码 


1、题目链接

LCR 159. 库存管理 III - 力扣(LeetCode) 

2、题目介绍

仓库管理员以数组 stock 形式记录商品库存表,其中 stock[i] 表示对应商品库存余量。请返回库存余量最少的 cnt 个商品余量,返回 顺序不限

示例 1:

输入:stock = [2,5,7,4], cnt = 1
输出:[2]

示例 2:

输入:stock = [0,2,3,6], cnt = 2
输出:[0,2] 或 [2,0]

提示:

  • 0 <= cnt <= stock.length <= 10000
    0 <= stock[i] <= 10000

3、解法

  1. 选择合适的算法

    • 最小的 cnt 个数将位于数组的前 cnt 个位置,因此选择堆排序效率较高的排序算法。
  2. 实现堆排序

    • 堆排序分为两个主要部分:构建堆和调整堆。
    • 构建大堆:从最后一个非叶子节点开始向上遍历每个节点,进行向下调整(AdjustDown),确保每个节点都满足堆的性质(父节点的值大于子节点的值,对于大堆)。
    • 调整堆并排序将堆顶元素(最大值)与堆的最后一个元素交换,然后减少堆的大小,并重新调整新的堆顶元素(使用向下调整AdjustDown),使其满足堆的性质。重复这个过程,直到堆的大小为1,此时数组已经是有序的。

4、代码 

class Solution {
public:
//向下调整void AdjustDown(vector<int>& nums, int n, int parent){//子节点必须不越界。 child < nums.size()int child = parent * 2 + 1;while (child < n){// 确认child指向大的那个孩子if (child + 1 < n && nums[child + 1] > nums[child]){++child;}if (nums[parent] < nums[child]){swap(nums[parent], nums[child]);parent = child;child = parent * 2 + 1;}elsebreak;}}void HeapSort(vector<int>& nums) {//从叶子结点建堆for (int i = (nums.size() - 1 - 1) / 2; i >= 0; i--){AdjustDown(nums, nums.size(), i);}int end = nums.size() - 1;while (end > 0){swap(nums[0], nums[end]);AdjustDown(nums, end, 0);--end;}}vector<int> inventoryManagement(vector<int>& stock, int cnt) {HeapSort(stock);vector<int> ret;while(cnt--){ret.push_back(stock[cnt]);}return ret;}
};

💗感谢阅读!💗

 

相关文章:

  • Python Web 与量子计算
  • css的页面布局属性
  • 65.【C语言】联合体
  • Databend 实现高效实时查询:深入解读 Dictionary 功能
  • 对于基础汇编的趣味认识
  • 综合练习 学习案例
  • 【AIGC】ChatGPT提示词助力自媒体内容创作升级
  • 笔记本电脑如何改ip地址:操作指南与注意事项
  • 深度解析:Python蓝桥杯青少组精英赛道与高端题型概览
  • 程序设计语言
  • JavaScript模块化-CommonJS规范和ESM规范
  • 论文阅读(十一):CBAM: Convolutional Block Attention Module
  • C++入门(有C语言基础)
  • 并行编程实战——TBB框架的应用之一Supra的基础
  • 【2024】前端学习笔记11-网页布局-弹性布局flex
  • javascript从右向左截取指定位数字符的3种方法
  • js对象的深浅拷贝
  • js学习笔记
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 大快搜索数据爬虫技术实例安装教学篇
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 近期前端发展计划
  • 理解在java “”i=i++;”所发生的事情
  • 前端面试之闭包
  • 前端面试总结(at, md)
  • 前端学习笔记之观察者模式
  • 数据仓库的几种建模方法
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Redis 入门到精通(一)数据类型(4)
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #android不同版本废弃api,新api。
  • #Linux(帮助手册)
  • #职场发展#其他
  • (2)STL算法之元素计数
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (二)windows配置JDK环境
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (十八)SpringBoot之发送QQ邮件
  • (四)鸿鹄云架构一服务注册中心
  • (转)Linq学习笔记
  • .gitignore不生效的解决方案
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Core 项目指定SDK版本
  • .NET delegate 委托 、 Event 事件
  • .Net FrameWork总结
  • .NET Micro Framework 4.2 beta 源码探析
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 反射的使用
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • [1]-基于图搜索的路径规划基础
  • [ACM] hdu 1201 18岁生日
  • [AHK V2]鼠标悬停展开窗口,鼠标离开折叠窗口
  • [AIGC] 使用Curl进行网络请求的常见用法