数组计数

1.数组计数使用技巧

思考这样一个问题:

给了十个人,编号分别是 1~10,现在人们要给他们投票。输入 n 个数字,数字是几就代表这一票投给了编号为几的人。

如果不用数组,可以如何实现这个功能呢?用 if,可以定义十个变量 a,b,c,d,e,f,g,h,i,j,然后依次判断输入的数字,再让对应的变量增加即可:

cin >> x;
if (x == 1) a++;
else if (x == 2) b++;
else if (x == 3) c++;
else if (x == 4) d++;
....

如果将变量替换为数组,定义数组 a,用 a[1] 记录编号为 1 的人的票数,a[2] 记录编号为 2 的人的票数,以此类推,那么代码就是:

cin >> x;
if (x == 1) a[1]++;
else if (x == 2) a[2]++;
else if (x == 3) a[3]++;
...

其实这代码也可以写成:

cin >> x;
a[x]++;

这便是数组计数的思想了,本质还是利用数组元素的下标,把要记录信息的对象和数组元素建立联系,以此来快速地更新和获取信息。

在使用数组计数时,要注意信息对象的数据范围,是否会超过数组的范围。例如上述例子,如果把被投票的人改成 1,000,000,000 个,若直接用数组计数的方式来记录信息,我们就需要把数组开到 1,000,000,000 的长度,这显然是不可能的。

2.课上例题

求n个数中每个数出现的次数

求n个数中出现次数最多的数

找筷子

宇宙总统

出现次数超过一半的数

缺失的数字

去除重复数字

学员的名次?

扑克

练习

消消乐

校门外的树

平衡数

梦中的统计

黑客入侵!

明明的随机数

天际线

彩票摇奖

开灯