代码对数据的处理
在一个数组中找出出现次数最多的那个元素的数值。例如,输入数组 a = [1,2,3,4,5,5,6] 中,只有 5 出现了两次,其余都是 1 次。显然 5 出现的次数最多,则输出 5。为了降低时间复杂度,我们引入了 k-v 的字典的数据结构。那么问题来了,究竟是什么原因,促使我们想到了使用字典的数据结构呢?如果不使用字典,改为使用数组行不行呢?
为了回答这些问题,我们先看一下究竟此处代码需要对数据进行哪些操作。我们提到过,这段代码处理数据的核心思路是:
- 第一步,根据原始数组计算每个元素出现的次数;
- 第二步,根据第一步的结果,找到出现次数最多的元素。
首先,我们来分析第一步统计出现次数的处理。此时,你还不知道应该采用什么数据结构。
对于每一次的循环,你得到了输入数组中的某个元素 a[ i ] 。接着,你需要判断这个元素在未知的数据结构中是否出现过:
- 如果出现了,就需要对出现的次数加 1。
- 如果没有出现过,则把这个元素新增到未知数据结构中,并且把次数赋值为 1。
这里的数据操作包括以下 3 个。
-
查找: 看能否在数据结构中查找到这个元素,也就是判断元素是否出现过。
-
新增: 针对没有出