数据结构学习 jz40 最小的 k 个数

关键词:排序 快排思想 计数排序 大顶堆

题目:库存管理 III

方法一:sort快排,这种方法绝对过不了面试

方法二:快排思想,只排一半。效率最高

方法三:维护一个大小为cnt的最大堆

方法四:计数排序。

方法一:

sort快排

思路:

先sort快排,然后取前cnt

复杂度计算:

时间复杂度O(nlogn)

空间复杂度O(N)

代码:

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

方法二:效率最高

 快排思想

思路:

快排会把大于target的数放在左边,把小于target的数放在右边,所以如果target排好之后,target的索引i刚好等于cnt即可。

来自k神的图:

如果cnt刚好等于2,那么返回前面1 0即可。

如果i大于cnt,那么说明我们还要排一排左边的数。

如果i小于cnt,那么说明我们还要排一排右边的数。

复杂度计算:

时间复杂度O(N)

空间复杂度O(logN)

代码:

class Solution {
public:vector<int> inventoryManagement(vector<int>& stock, int cnt) {quick_sort(0,stock.size()-1,stock,cnt);return vector<int>(stock.begin(),stock.begin()+cnt);}void quick_sort(int p_l,int p_r,vector<int>& stock,int cnt){int l=p_l,r=p_r;if(l>=r) return;int target=stock[l];while(true){while(stock[r]>=target&&l<r){r--;}stock[l]=stock[r];while(stock[l]<=target&&l<r){l++;}stock[r]=stock[l];if(l==r) {stock[l]=target;break;}}if(l==cnt) return;//排好了if(l<cnt)//排少了quick_sort(l+1,p_r,stock,cnt);if(l>cnt)//排多了quick_sort(p_l,l-1,stock,cnt);}
};

方法三:

维护一个大小为cnt的大顶堆。

思路:

维护一个大小为cnt的大顶堆q。

1、先往q里面塞cnt个数。

2、后面的数x先和堆顶q.top()比较:如果x>=q.top(),直接舍弃。

                                                         如果x<q.top(),先把堆顶推出q.pop(),然后再添加x。

3、输出大顶堆。

复杂度计算:

时间复杂度O(nlogk) k是前k小,因为维护的是k大小的大顶堆

空间复杂度O(k)

代码:

class Solution {
public:vector<int> inventoryManagement(vector<int>& stock, int cnt) {vector<int> result;if(cnt==0) return result;priority_queue<int,vector<int>,less<int>> Q;for(int i=0;i<cnt;++i){Q.push(stock[i]);}for(int i=cnt;i<stock.size();i++){if(Q.top()<=stock[i]) continue;Q.pop();Q.push(stock[i]);}for(int i=0;i<cnt;++i){result.push_back(Q.top());Q.pop();}return result;}
};

方法四:

计数排序

思路:

先计数排序,然后取前cnt。

复杂度计算:

时间复杂度O(n)

空间复杂度O(10000)

代码:

class Solution {
public:vector<int> inventoryManagement(vector<int>& stock, int cnt) {//计数排序//统计//累加//从后往前排vector<int> sort_result(stock.size(),0);vector<int> count_sort(10001,0);for(const int&x:stock){count_sort[x]++;}for(int i=1;i<count_sort.size();++i){count_sort[i]+=count_sort[i-1];}for(int i=count_sort.size()-1;i>=0;--i){while((i==0&&count_sort[i]!=0)||(i!=0&&count_sort[i]!=count_sort[i-1])){sort_result[count_sort[i]-1]=i;count_sort[i]--;}}return vector<int>(sort_result.begin(),sort_result.begin()+cnt);}
};

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

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

相关文章

ChatGPT:人工智能划时代的标志(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. 什么是ChatGPT?二. ChatGPT是如何工作的&#xff1f;三. ChatGPT的应用领域四. ChatGPT的优缺点…

认识Linux指令之 “tar” 指令

01.tar指令&#xff08;重要&#xff09; 打包/解包&#xff0c;不打开它&#xff0c;直接看内容 tar [-cxtzjvf] 文件与目录 .... 参数&#xff1a; -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b; -x &#xff1a;解开一个压缩文件的参数指令&am…

Webpack 怎么实现按需异步加载模块

要弄懂这个问题&#xff0c;需要先来看关于webpack打包的3个问题。 三个问题 第一个问题 项目中的json文件&#xff0c;如何使用webpack进行处理&#xff1f; 如果我们希望把json文件当做静态配置&#xff0c;例如有如下json文件 {"version": "1.0.0"…

介绍下Redis 的基础数据结构

目录 这周开始学习 Redis&#xff0c;看看Redis是怎么实现的。所以会写一系列关于 Redis的文章。这篇文章关于 Redis 的基础数据。阅读这篇文章你可以了解&#xff1a; 动态字符串&#xff08;SDS&#xff09; 链表 字典 三个数据结构 Redis 是怎么实现的。 SDS SDS &#xff…

前端框架前置课Node.js学习(1) fs,path,模块化,CommonJS标准,ECMAScript标准,包

目录 什么是Node.js 定义 作用: 什么是前端工程化 Node.js为何能执行Js fs模块-读写文件 模块 语法: 1.加载fs模块对象 2.写入文件内容 3.读取文件内容 Path模块-路径处理 为什么要使用path模块 语法 URL中的端口号 http模块-创建Web服务 需求 步骤: 案例:浏…

【NI国产替代】NI‑9234,4通道,51.2 kS/s/ch,±5 V,C系列声音与振动输入模块

4通道&#xff0c;51.2 kS/s/ch&#xff0c;5 V&#xff0c;C系列声音与振动输入模块 NI‑9234可以测量来自集成电子压电(IEPE)和非IEPE传感器的信号&#xff0c;例如加速度计、转速计和接近式探针。 NI‑9234还可兼容智能TEDS传感器。\n\nNI‑9234提供了宽动态范围&#xff0c…

开启C++之旅(下):引用、内联函数及现代特性(auto和范围for循环)

上次介绍了&#xff1a;开启C之旅&#xff08;上&#xff09;&#xff1a;探索命名空间与函数特性&#xff08;缺省参数和函数重载&#xff09; 今天就接着进行c入门的知识讲解 文章目录 1.引用1.1引用概念1.2引用特性1.3常引用其他情况 1.4引用使用场景1.4.1做参数1.4.2做返回…

Proxy的使用方法和13种拦截操作

前言 proxy是ES6新推出的方法,功能很强大。属于元编程,也就是修改js本身的一些东西。可以对数组,对象,函数等引用类型的对象进行一些复杂的操作。 其中,大部分人应该最熟悉的莫过于vue3中使用proxy替换了defineProperty,而且还实现了本身defineProperty不能实现的一些东西。 …

在校大学生可以考哪些 ?(38个考证时间表)

这是整理的在校大学生可以考的&#xff0c;有的对报名条件没有要求&#xff0c;有的是高中以上学历&#xff0c;还有一些应届生可以报考的。可以在支付宝搜索【亿鸣证件照】或者微信搜索【随时照】制作这些考证要求的证件照哦 1、教师资格证 2、英语四六级 3、计算机二级 4、普…

JVM实战(19)——JVM调优工具概述

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

代码随想录 Leetcode541. 反转字符串 II

题目&#xff1a; 代码(首刷自解 2024年1月16日&#xff09;&#xff1a; class Solution { public:void reverse(string& s,int left,int right) {char temp;while (left < right) {temp s[left];s[left] s[right];s[right] temp;left;--right;}return;}string rev…

FastDFS 环境搭建及使用详解

文章目录 1、简介1.1 分布式文件系统1.2 FastDFS1.3 FastDFS架构 2、环境搭建2.1 FastDFS安装2.1.1 安装前准备2.1.2 安装包下载2.1.3 安装 libfastcommon2.1.4 安装 libserverframe2.1.5 安装 FastDFS 2.2 FastDFS配置2.2.1 配置tracker2.2.1.1 创建 tracker 工作目录2.2.1.2 …

Android APP开发集成微信登陆流程(手把手新手版)

本文比较适合新手玩家&#xff0c;老玩家就不要看了 昨天整了下微信登陆&#xff0c;乍一看官方文档还有点难懂&#xff01;遂自己整理了下流程&#xff0c;给大家参考参考。 官方文档链接&#xff1a;准备工作 | 微信开放文档微信开发者平台文档https://developers.weixin.q…

晶圆表面缺陷检测现状概述

背景&#xff1a; 晶圆表面缺陷检测设备主要检测晶圆外观呈现出来的缺陷&#xff0c;损伤、毛刺等缺陷&#xff0c;主要设备供应商KLA&#xff0c;AMAT&#xff0c;日立等&#xff0c;其中KLA在晶圆表面检测设备占有市场52%左右。 检测设备分类&#xff1a; 电子束设备和光学…

浅谈安科瑞电流表和频率表在冰岛某木制品工厂的的应用

摘要&#xff1a;用户侧配电系统的智能化、精细化、可视化是当下配电管理的必然趋势。针对用户侧的配电进线回路&#xff0c;设计安装智能仪表&#xff0c;再通过设置仪表参数来实时监控各负载回路的工作状态&#xff1b;提高用能安全、提升设备维护效率、降低维护的人工成本、…

分类预测 | Matlab实现CS-SVM布谷鸟算法优化支持向量机的数据分类预测

分类预测 | Matlab实现CS-SVM布谷鸟算法优化支持向量机的数据分类预测 目录 分类预测 | Matlab实现CS-SVM布谷鸟算法优化支持向量机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现CS-SVM布谷鸟算法优化支持向量机的数据分类预测。 2.自带数据…

Matlab 使用 DH table 建立的 robot 和实际不符

机器人仿真 想借助 matlab robotics toolbox 来仿真机器人&#xff0c;但是直接输入自己的 DH table 显示出来的 robot 和实际不情况不符。 DH table 建立 robot Build Manipulator Robot Using Kinematic DH Parameters 主要使用 setFixedTransform&#xff0c;DH table 中…

【松叶漫话】来聊聊ChatGPT 和文心一言吧

两大AI助手的较量 在当今信息技术飞速发展的时代&#xff0c;人工智能助手成为我们生活中不可或缺的一部分。ChatGPT和文心一言作为两大代表性的AI助手&#xff0c;在智能回复、语言准确性、知识库丰富度等方面各有千秋。本文将就这两位AI助手的特点进行深入比较&#xff0c;为…

OLAP引擎也能实现高性能向量检索,据说QPS高于milvus!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 随着 LLM 技术应用及落地&#xff0c;数据库需要提高向量分析以及 AI 支持能力&#xff0c;向量数据库及向量检索等能力“异军突起”&#xff0c;迎来业界持续不断关…

深入解析阻塞队列BlockingQueue及源码(超详细)

一、基础概念 1.1 BlockingQueue BlockingQueue 是 java.util.concurrent 包提供的用于解决并发生产者 - 消费者问题的最有用的类。 1.1.1 队列类型&#xff1a; 无限队列 &#xff08;unbounded queue &#xff09; - 几乎可以无限增长 有限队列 &#xff08; bounded qu…