📌  相关文章
📜  数组中所有最小出现元素的总和(1)

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

数组中所有最小出现元素的总和

有一个数组,需要找出所有元素中出现次数最少的元素,然后将这些元素的值相加,即为所求的结果。

解决方案
方案一

先统计每个元素出现的次数,然后找到出现次数最小的元素,最后遍历一遍数组,将值等于最小出现次数的元素相加即可。

def sum_min_elements(arr):
    counter = {}
    for item in arr:
        if item not in counter:
            counter[item] = 0
        counter[item] += 1

    min_count = min(counter.values())
    result = sum(item for item, count in counter.items() if count == min_count)

    return result

时间复杂度为 O(n),空间复杂度为 O(n),因为需要使用一个字典来存储每个元素出现的次数。

方案二

先排序,然后找到出现次数最少的元素,最后遍历一遍数组,将值等于最小出现次数的元素相加即可。

def sum_min_elements(arr):
    arr.sort()
    count = 1
    for i in range(1, len(arr)):
        if arr[i] != arr[i-1]:
            if count <= min_count:
                min_count = count
                result = arr[i-1] * count
            count = 1
        else:
            count += 1

    if count <= min_count:
        result = arr[-1] * count

    return result

时间复杂度为 O(nlogn),空间复杂度为 O(1),因为不需要额外的空间来存储元素出现的次数。

总结

以上两种解决方案都能够得到正确的结果,方案一比较简单,但需要额外存储字典;方案二没有额外的存储,但排序增加了时间复杂度。根据实际情况选择合适的方案。