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

作者:七度上弦 时间:2023-06-28 19:37:55 

题目:

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”桶的思想

来源:http://blog.csdn.net/qq_14908027/article/details/78788085

标签:数组,数字,多少次
0
投稿

猜你喜欢

  • TensorFlow命名空间和TensorBoard图节点实例

    2022-01-15 04:52:23
  • 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
  • DreamweaverMX2004技巧两则

    2010-09-05 21:10:00
  • python模拟鼠标点击和键盘输入的操作

    2023-01-14 18:29:00
  • 解决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
  • python实现对象列表根据某个属性排序的方法详解

    2022-12-24 23:47:43
  • 教你快速掌握更改表中列顺序的好方法

    2008-11-27 17:14:00
  • golang编程入门之http请求天气实例

    2024-05-09 09:32:00
  • 数据库报错:Unknown column 'xxx' in 'where clause'问题的解决过程

    2024-01-22 23:23:04
  • 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
  • 浅析PEP572: 海象运算符

    2023-06-28 10:56:10
  • 小白学Python之实现OCR识别

    2022-02-12 20:35:48
  • python 中Arduino串口传输数据到电脑并保存至excel表格

    2022-05-17 05:41:11
  • asp之家 网络编程 m.aspxhome.com