python 计算数组中每个数字出现多少次--“Bucket”桶的思想


Posted in Python onDecember 19, 2017

题目:

python 计算数组中每个数字出现多少次--“Bucket”桶的思想

解法一:比较元素是否相等

思路说明:

这种应该是普通人最先想到的解法,先获取到数组之后进行有小到大排序,然后初始化一个min=0(代表新数字的开始角标),然后遍历新数组的每一个元素,如果两个元素不相等,count等于i-min,然后再把i赋值给min,当i遍历到最后一个元素时,count等于数组长度-min(这里的min是上一轮循环后最后一组数字的第一个元素的角标),当然这种解法面试官不会喜欢?

(m, n) = input().split()
ar = [int(x) for x in input().split()]
res = []
ar.sort()
min = 0
for i in range(1,len(ar)) :
  if ar[i-1] != ar[i]:
    count = i - min
    min = i
    res.append(str(count))
  if i == (len(ar)-1):
    count = len(ar)-min
    res.append(str(count))
print(' '.join(res))

解法二:桶计算

思路:获取到输入的数组之后,获取该数组的长度,因为根据题目N<=20,也就是说数组的元素不会超过20,那么我们定义一个1维,长度为20的数组res,并初始化元素为0是足够的。先上代码,再进行解析

(m, n) = input().split()
ar = [int(x) for x in input().split()]
result = []
res = [0 for x in range(20)]
for a in ar:
  res[a-1]+=1
for r in res:
  if r != 0:
    result.append(str(r))
print(' '.join(result))

以上的而核心代码就在于这两行

for a in ar:
  res[a-1]+=1

我们遍历输入的数组ar的每一个元素,用res[a]的数值代表a出现的次数,我们每次循环,总能找到合适的桶存放a,那么我们直接+1即可,比如说ar = [2, 2, 1, 4]

循环1: 
a = 2 
res[2] = 0+1 = 1 
循环2: 
a = 2 
res[2] = 1 +1 =2 
循环3: 
a = 1 
res[1] = 0+1 = 1 
循环4: 
a = 4 
res[4] = 0+1 = 1 
这样我们得到的 res = [0, 1 ,2 ,0 ,1 ,0 ····]

延伸:桶排序

根据以上的思路我们得到了一个新的数组res,仔细分析这个数组的意思,1出现1次,2出现2次,4出现1次,因为数组的特性保证元素的角标是从小到大排序,这就衍生出了桶排序的概念,忽略0的情况,用两个循环,外层循环遍历len(res)次,角标为i,内层循环遍历res[i]次,角标为j,意思就是有几个输出几个,例如1有1个,那就输出1个,2有两个,就循环两次,输出两次,4有1个,就输出一个,扩展代码如下:

#省略上述代码
for i in range(len(res)):
  if res[i] != 0:
    for j in range(res[i]):
      result.append(i)
print(result)

执行结果如下:

python 计算数组中每个数字出现多少次--“Bucket”桶的思想

Python 相关文章推荐
详解python3实现的web端json通信协议
Dec 29 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
python字典操作实例详解
Nov 16 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
python实现字符串和字典的转换
Sep 29 Python
Django框架使用mysql视图操作示例
May 15 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
Keras使用tensorboard显示训练过程的实例
Feb 15 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
python实现自动打卡的示例代码
Oct 10 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 #Python
Python实现感知器模型、两层神经网络
Dec 19 #Python
python实现感知器
Dec 19 #Python
python绘制简单折线图代码示例
Dec 19 #Python
matplotlib设置legend图例代码示例
Dec 19 #Python
matplotlib中legend位置调整解析
Dec 19 #Python
python实现感知器算法详解
Dec 19 #Python
You might like
PHP中防止SQL注入实现代码
2011/02/19 PHP
PHP return语句的另一个作用
2014/07/30 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
Laravel使用RabbitMQ的方法示例
2019/06/18 PHP
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
jquery右下角弹出提示框示例代码
2013/10/08 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
jquery 中的each()跳出循环的语句
2014/05/23 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
python中类的一些方法分析
2014/09/25 Python
详解python OpenCV学习笔记之直方图均衡化
2018/02/08 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
python虚拟环境完美部署教程
2019/08/06 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
银行求职自荐信
2014/06/30 职场文书
员工辞退通知书
2015/04/17 职场文书
实用求职信模板范文
2019/05/13 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
php将xml转化对象的实例详解
2021/11/17 PHP