如何在线性时间内用纯数组找出最大值的重复次数

本文讲解如何仅使用基础数组结构,在 O(n) 时间复杂度内高效找出数组中最大元素的出现频次,纠正“双重循环必为 O(n²)”的常见误解,并提供可直接运行的实现示例与关键注意事项。

本文讲解如何仅使用基础数组结构,在 O(n) 时间复杂度内高效找出数组中最大元素的出现频次,纠正“双重循环必为 O(n²)”的常见误解,并提供可直接运行的实现示例与关键注意事项。

在算法实践中,一个常见误区是将“两次独立遍历”错误等价于“嵌套循环”,从而误判时间复杂度。事实上,对同一数组先后执行两次单层 for 循环,其总时间复杂度仍为 O(n),而非 O(n²)。这是因为:

✅ 正确解法(单数组、零额外数据结构):

def count_max_duplicates(arr):
    if not arr:
        return 0

    # 第一遍:找出最大值
    max_val = arr[0]
    for num in arr[1:]:
        if num > max_val:
            max_val = num

    # 第二遍:统计最大值出现次数
    count = 0
    for num in arr:
        if num == max_val:
            count += 1

    return count

# 示例调用
nums = [3, 7, 2, 7, 1, 7, 4]
print(count_max_duplicates(nums))  # 输出:3(最大值 7 出现 3 次)

⚠️ 关键注意事项:

? 总结:
面对“仅用数组”的限制,最优解就是两趟线性扫描——简洁、稳健、理论最优。它既避免了 O(n²) 的暴力比对,又绕开了哈希结构的额外开销。理解“顺序执行 ≠ 嵌套执行”是掌握时间复杂度分析的关键一步。

本文转载于:互联网 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。