📅  最后修改于: 2023-12-03 15:23:43.337000             🧑  作者: Mango
数组是编程中常用的数据结构之一。在处理数组时,经常会遇到一些元素多次出现的情况。这篇文章将介绍一些处理多次出现的数组元素的方法。
哈希表是一种用于存储键值对的数据结构。在本方法中,我们可以使用一个哈希表记录各个元素出现的次数。遍历数组时,每遍历到一个元素,就将其在哈希表中对应的值加1。遍历完数组后,再遍历一次哈希表,将出现次数大于1的元素找出来即可。
def find_duplicates(arr):
d = {}
for num in arr:
d[num] = d.get(num, 0) + 1
res = []
for num, count in d.items():
if count > 1:
res.append(num)
return res
有些情况下,我们可能无法使用额外的哈希表来记录元素出现次数。不过,如果数组中的元素都是非负整数且小于数组的长度,我们可以用数组本身作为哈希表。具体做法是,遍历数组时,将每个数对应的位置上的元素取相反数。如果某个数对应的位置上的元素已经是负数,说明这个数已经出现过了。
def find_duplicates(arr):
for num in arr:
# 对应位置上的元素已经是负数,说明这个数已经出现过了
if arr[abs(num)] < 0:
res.append(abs(num))
# 将对应位置上的元素取相反数
arr[abs(num)] *= -1
return res
对数组进行排序后,重复元素会相邻出现。因此,我们可以遍历数组,检查每个元素是否和它前面的元素相等。
def find_duplicates(arr):
arr.sort()
res = []
for i in range(1, len(arr)):
if arr[i] == arr[i - 1]:
res.append(arr[i])
return res
以上三种方法针对不同的情况,选择了不同的实现方式。在实际编程中,我们可以根据具体的问题选择合适的方法。