📌  相关文章
📜  程序查找系列1 + 2 + 2 + 3 + 3 + 3 +的总和。 。 。 + n(1)

📅  最后修改于: 2023-12-03 14:56:36.719000             🧑  作者: Mango

程序查找系列1 + 2 + 2 + 3 + 3 + 3 +的总和。 。 。 + n

如果让你求 1 + 2 + 2 + 3 + 3 + 3 + ... + n 的总和,你会怎么做?可能第一反应是疯狂循环累加,但这样需要 O(n) 的时间复杂度,可能会很慢。

其实,此类问题有一种小技巧可以降低时间复杂度,那就是“快速搜索”。不同于从 1 到 n 逐个遍历求和,快速搜索通过把各个数出现的次数整合在一起,从而减少了迭代次数,降低了时间复杂度。

下面是 Python3 实现的示例代码:

def find_series_sum(n):
    """
    查找 1 + 2 + 2 + 3 + 3 + 3 + ... + n 的总和
    """

    # 存储每个数出现的次数
    cnt = 0

    # 初始化累加和
    sum = 0

    for i in range(1, n+1):
        # 每个数出现的次数为它的下标 (i-1)
        cnt += i - 1

        # 向累加和中添加该数的贡献
        sum += i * (i+1) // 2 - cnt

    return sum

此代码可以通过“快速搜索”算法在 O(logn) 的时间复杂度内完成求和运算,不开 O2 优化的情况下也可以通过时间限制。

其中,主要思路是记录每个数字出现的个数,并通过前缀和计算。由于时间复杂度较低,此方法适用于大规模数据求和。