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

leetcode LCR 159 库存管理III

一、题目描述

二、解题思路

整体思路

可以采用快速选择排序算法来解决这个问题,即三指针区间划分的方法。本题的解题思路与leetcode 215 数组中的第K个最大元素-CSDN博客一致。

具体思路

(1)当l>=r时,表示区间内只有一个元素或者没有元素,表示排序完成,直接return;

(2)调用产生随机数的函数GetRandom来获得随机基准key。left用于记录小于key的区间的右端点,初始化为l-1。right用于记录大于key的区间的左端点,初始化为r+1。i用于遍历向量,初始化为l,使用三指针将向量划分成三个部分:

<1>如果nums[i]==key,执行i++;

<2>如果nums[i]<key,执行swap(nums[++left],nums[i++]);

<3>如果nums[i]>key,执行swap(nums[--right],nums[i]);

(3)此时向量被划分成[l,left],区间长度为a,[left+1,right-1],区间长度为b,[right,r]三个区间,分三种情况进行讨论:

<1>如果a>=k,则说明这k个元素在[l,left]区间内,执行qsort(nums,l,left,k);

<2>如果a+b>=k,则说明这k个元素在[l,left]和[left+1,right-1]区间内,无需再排序,直接return即可;

<3>否则,则说明这k个元素还需要[right+1,r]区间内的部分元素,执行qsort(nums,right+1,r,k-a-b)即可;

三、代码实现

解法一:sort排序,取最小的K个元素

时间复杂度:T(n)=O(nlogn)

空间复杂度:S(n)=O(1) 

class Solution {
public:vector<int> inventoryManagement(vector<int>& stock, int cnt) {sort(stock.begin(),stock.end());return {stock.begin(),stock.begin()+cnt};}
};

解法二:快速选择排序算法

时间复杂度:T(n)=O(n)

空间复杂度:S(n)=O(1)

class Solution {
public:vector<int> inventoryManagement(vector<int>& nums, int k) {//产生随机数种子srand(time(NULL));qsort(nums,0,nums.size()-1,k);return {nums.begin(),nums.begin()+k};}//快速选择排序算法void qsort(vector<int>& nums,int l,int r,int k){//递归出口if(l>=r) return;//1.随机产生基准int key=GetRandom(nums,l,r);//2.按基准划分成三块int left=l-1,right=r+1,i=l;while(i<right){if(nums[i]==key) i++;else if(nums[i]<key) swap(nums[++left],nums[i++]);else swap(nums[--right],nums[i]);}//3.分情况处理//[l,left],[left+1,right-1],[right,r]三个区间int a=left-l+1,b=right-left-1;if(a>=k) qsort(nums,l,left,k);else if(a+b>=k) return;else qsort(nums,right,r,k-a-b);}//产生随机数int GetRandom(vector<int>& nums,int left,int right){int r=rand();return nums[left+r%(right-left+1)];}
};


文章转载自:

http://0LnaH30q.gcbhh.cn
http://5lfyGpVA.gcbhh.cn
http://ufYinbof.gcbhh.cn
http://yYmKZLrK.gcbhh.cn
http://Mw1Pbnde.gcbhh.cn
http://3r3h2Fsj.gcbhh.cn
http://U50XXTiK.gcbhh.cn
http://wduePLpG.gcbhh.cn
http://rsrQcd8k.gcbhh.cn
http://OKNIPysJ.gcbhh.cn
http://PQsv8sFT.gcbhh.cn
http://NT8uPur2.gcbhh.cn
http://cLfmkUJg.gcbhh.cn
http://fi2hWeMf.gcbhh.cn
http://ciFXYlK2.gcbhh.cn
http://7nMmAKb8.gcbhh.cn
http://wCm3FM83.gcbhh.cn
http://Z5cEKgkR.gcbhh.cn
http://n7iDBhtu.gcbhh.cn
http://lIWoQthQ.gcbhh.cn
http://p6Q1TV31.gcbhh.cn
http://7RvZCpK3.gcbhh.cn
http://7PV0QSwQ.gcbhh.cn
http://0MBgy559.gcbhh.cn
http://vU3BNnSp.gcbhh.cn
http://SuzitaQC.gcbhh.cn
http://XCx9x7oN.gcbhh.cn
http://xst8XirU.gcbhh.cn
http://6JKKxk6V.gcbhh.cn
http://i3FHBjnz.gcbhh.cn
http://www.dtcms.com/a/370580.html

相关文章:

  • 使用 TCMalloc 检查内存使用情况和内存泄漏
  • Altium Designer(AD24)加载License文件方法
  • 【Gigascience】时空转录组测序探索小鼠心脏发育的细胞与分子基础
  • Ubuntu:Git SSH密钥配置的完整流程
  • 智能驾驶调研
  • 【Luogu_P8118】 「RdOI R3.5」Mystery【Slope Trick】【DP】
  • SSH服务远程安全登录
  • cds序列转换为pepperl脚本详细解读及使用
  • 什么时候用no,什么时候用non,什么时候用not?
  • 2025年本体论:公理与规则的挑战与趋势
  • 发布vue项目、nginx配置及问题场景(history)
  • Netty从0到1系列之EventLoop
  • 在Ubuntu上配置Nginx实现开机自启功能
  • 智慧灌区系统:科技赋能,让农田灌溉更智能、更高效、更可持续
  • 第2课:环境搭建:基于DeepSeek API的开发环境配置
  • 本地MOCK
  • 使用Docker安装Stirling-PDF(PDF工具)
  • 交换机详细
  • 综合安防集成系统解决方案,智慧园区,智慧小区安防方案(300页Word方案)
  • Spring Data JPA 对PostgreSQL向量数据的支持
  • 去中心化投票系统开发教程 第二章:开发环境搭建
  • BOSS直聘招聘端自动化识别策略调整(20250905)
  • MySQL--索引和事务
  • c++之基础B(双重循环)(第五课)
  • 3、工厂模式
  • 2025高教社国赛数学建模竞赛B题完整参考论文(含模型和代码)
  • MCP Token超限问题解决方案
  • 并行编程实战——CUDA编程的纹理内存
  • 京东商品评论API开发指南
  • Day27 函数2 装饰器