📌  相关文章
📜  多次出现的数组元素(1)

📅  最后修改于: 2023-12-03 15:23:43.337000             🧑  作者: Mango

多次出现的数组元素

数组是编程中常用的数据结构之一。在处理数组时,经常会遇到一些元素多次出现的情况。这篇文章将介绍一些处理多次出现的数组元素的方法。

方法1:用哈希表记录元素出现次数

哈希表是一种用于存储键值对的数据结构。在本方法中,我们可以使用一个哈希表记录各个元素出现的次数。遍历数组时,每遍历到一个元素,就将其在哈希表中对应的值加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
方法2:利用数组本身作为哈希表

有些情况下,我们可能无法使用额外的哈希表来记录元素出现次数。不过,如果数组中的元素都是非负整数且小于数组的长度,我们可以用数组本身作为哈希表。具体做法是,遍历数组时,将每个数对应的位置上的元素取相反数。如果某个数对应的位置上的元素已经是负数,说明这个数已经出现过了。

def find_duplicates(arr):
    for num in arr:
        # 对应位置上的元素已经是负数,说明这个数已经出现过了
        if arr[abs(num)] < 0:
            res.append(abs(num))
        # 将对应位置上的元素取相反数
        arr[abs(num)] *= -1
    return res
方法3:排序后查找相邻重复元素

对数组进行排序后,重复元素会相邻出现。因此,我们可以遍历数组,检查每个元素是否和它前面的元素相等。

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

以上三种方法针对不同的情况,选择了不同的实现方式。在实际编程中,我们可以根据具体的问题选择合适的方法。