对公司几万名员工按年龄排序(时间复杂度为O(N))

本文介绍了如何在面试中面对要求时间复杂度为O(N)的情况下,解决对公司几万名员工按年龄排序的问题。分析指出,可以通过创建一个记录每个年龄出现次数的辅助数组,然后根据这个计数来重新排列原数组。测试结果展示了算法在20位员工数据上的应用。
摘要由CSDN通过智能技术生成

【0】 目录

【1】题目
【2】分析
【3】测试代码
【4】测试结果

【1】题目:

面试官: 请实现一个排序算法,要求时间复杂度为O(N)
应聘者:请问对什么数字进行排序,共有多少数字?
面试官:我们想对公司所有员工按年龄排序,我们公司共有几万名员工;
应聘者:也就是说数字的大小在一个较小的范围之内,对吗?
面试官:是的
应聘者:可以使用辅助空间吗?
面试官:看你用多少内存,只允许使用常量大小的辅助空间,不得超过O(N);
应聘者:好的,我知道了;,

【2】分析:

通过面试官的要求,我们可以确定的是,是要求在一个有限范围内排序,并且实现效率为O(N),那么我们可以将员工年纪设置在0~99范围内,借助一个辅助空间,可以是一个数组,用来保存从0到99岁这100个年龄出现的次数,某个年纪每出现一次,就给对应下标的空间加1,然后再根据这个数组中记录的次数,确定该年纪在原数组中相应出现多少次;

【3】测试实现:

#include<iostream>
using namespace std;
//=====================================算法=======&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值