算法题题解记录——14. 数组元素之和最小化

101 阅读1分钟

题目

www.marscode.cn/practice/65… image.png

方法一 (遍历)

def solution(n: int, k: int) -> int:
    ans = 0
    for i in range(1, n + 1):
        ans += i * k
    return ans

if __name__ == '__main__':
    print(solution(n = 3, k = 1) == 6)
    print(solution(n = 2, k = 2) == 6)
    print(solution(n = 4, k = 3) == 30)

复杂度

  • 时间复杂度O(n)
  • 空间复杂度O(1)

方法二 (等差数列求和)

上述方法即:

ans=1k+2k+3k+...+nkans=1*k + 2*k + 3*k + ... + n*k

等价于

ans=k×n×(n+1)2ans=k \times \dfrac{n \times (n + 1)}{2}
def solution(n: int, k: int) -> int:
    return (n * (n + 1) // 2) * k

if __name__ == '__main__':
    print(solution(n = 3, k = 1) == 6)
    print(solution(n = 2, k = 2) == 6)
    print(solution(n = 4, k = 3) == 30)

复杂度

  • 时间复杂度O(1)
  • 空间复杂度O(1)