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 相关文章推荐
Python简单遍历字典及删除元素的方法
Sep 18 Python
python利用Guetzli批量压缩图片
Mar 23 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
pandas数据分组和聚合操作方法
Apr 11 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
python版本单链表实现代码
Sep 28 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
python opencv 简单阈值算法的实现
Aug 04 Python
python django 原生sql 获取数据的例子
Aug 14 Python
PyQt5实现简单的计算器
May 30 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脚本
2006/11/26 PHP
PHP仿盗链代码
2012/06/03 PHP
js arguments对象应用介绍
2012/11/28 Javascript
js返回前一页刷新本页重载页面
2014/07/29 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
如何运行Python程序的方法
2013/04/21 Python
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
临床医学应届生求职信
2013/11/06 职场文书
党校培训思想汇报
2014/01/03 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
计生工作先进事迹
2014/08/15 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书
老公保证书怎么写
2015/02/26 职场文书
中学推普周活动总结
2015/05/07 职场文书
趣味运动会口号
2015/12/24 职场文书