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 查找文件夹下所有文件 实现代码
Jul 01 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
对python判断是否回文数的实例详解
Feb 08 Python
详解python做UI界面的方法
Feb 27 Python
Python中print函数简单使用总结
Aug 05 Python
pytorch 共享参数的示例
Aug 17 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
python实现微信打飞机游戏
Mar 24 Python
Python函数参数定义及传递方式解析
Jun 10 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
matplotlib更改窗口图标的方法示例
Feb 03 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 is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
PHP完全二叉树定义与实现方法示例
2017/10/09 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
两个select之间option的互相添加操作(jquery实现)
2009/11/12 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
原生js二级联动效果
2017/06/20 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
python实现简单井字棋游戏
2020/03/04 Python
自我评价的范文
2014/02/02 职场文书
公开承诺书格式
2014/05/21 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
大学学生会主席竞选稿怎么写?
2019/08/19 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS