python 计算数组中每个数字出现多少次--“Bucket”桶的思想
作者:七度上弦 时间:2023-06-28 19:37:55
题目:
解法一:比较元素是否相等
思路说明:
这种应该是普通人最先想到的解法,先获取到数组之后进行有小到大排序,然后初始化一个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)
执行结果如下:
来源:http://blog.csdn.net/qq_14908027/article/details/78788085
标签:数组,数字,多少次
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
TensorFlow命名空间和TensorBoard图节点实例
2022-01-15 04:52:23
![](https://img.aspxhome.com/file/2023/3/133473_0s.jpg)
python通过ElementTree操作XML
2021-01-09 09:12:20
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2023-07-10 09:12:19
Python Pandas 删除列操作
2023-12-17 22:03:53
基于Python实现一键找出磁盘里所有猫照
2022-06-20 03:52:32
![](https://img.aspxhome.com/file/2023/6/113156_0s.jpg)
DreamweaverMX2004技巧两则
2010-09-05 21:10:00
![](https://img.aspxhome.com/file/UploadPic/20072/200723113051334s.jpg)
python模拟鼠标点击和键盘输入的操作
2023-01-14 18:29:00
![](https://img.aspxhome.com/file/2023/3/121483_0s.png)
解决python "No module named pip"的问题
2021-02-18 13:32:50
Python Numpy中数组的集合操作详解
2023-12-04 12:02:24
十行代码使用Python写一个USB病毒
2021-08-27 17:05:41
![](https://img.aspxhome.com/file/2023/3/69593_0s.jpg)
python实现对象列表根据某个属性排序的方法详解
2022-12-24 23:47:43
教你快速掌握更改表中列顺序的好方法
2008-11-27 17:14:00
golang编程入门之http请求天气实例
2024-05-09 09:32:00
![](https://img.aspxhome.com/file/2023/8/127428_0s.png)
数据库报错:Unknown column 'xxx' in 'where clause'问题的解决过程
2024-01-22 23:23:04
![](https://img.aspxhome.com/file/2023/1/126281_0s.png)
Python模拟百度自动输入搜索功能的实例
2023-12-04 18:17:53
详解Go语言中用 os/exec 执行命令的五种方法
2024-05-28 15:21:51
Python requests发送post请求的一些疑点
2022-09-09 17:45:03
![](https://img.aspxhome.com/file/2023/9/77609_0s.png)
浅析PEP572: 海象运算符
2023-06-28 10:56:10
小白学Python之实现OCR识别
2022-02-12 20:35:48
![](https://img.aspxhome.com/file/2023/6/80476_0s.jpg)
python 中Arduino串口传输数据到电脑并保存至excel表格
2022-05-17 05:41:11
![](https://img.aspxhome.com/file/2023/6/69056_0s.png)