返回

利用数学方法实现 leetcode 2195. Append K Integers With Minimal Sum

后端

前言

leetcode 2195. Append K Integers With Minimal Sum 是 Weekly Contest 283 的第二题,考察的就是对题目的理解程度,用数学的方法解题即可,难度为 Medium。

题目

给定一个整数数组 target 和一个整数 k。从 1 到 k 中选择一些整数,并将它们追加到 target 的末尾。

返回将 k 个整数追加到 target 末尾后,target 的最小和。

示例 1:

输入:target = [1,2,3,4], k = 1
输出:10
解释:你可以选择整数 5 并将它追加到 target 的末尾,得到 [1,2,3,4,5]。
target 的最小和为 1 + 2 + 3 + 4 + 5 = 15。

示例 2:

输入:target = [1,2,3,4], k = 3
输出:27
解释:你可以选择整数 5、6 和 7 并将它们追加到 target 的末尾,得到 [1,2,3,4,5,6,7]。
target 的最小和为 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28。

示例 3:

输入:target = [1,2,3,4,5], k = 1
输出:21
解释:你可以选择整数 6 并将它追加到 target 的末尾,得到 [1,2,3,4,5,6]。
target 的最小和为 1 + 2 + 3 + 4 + 5 + 6 = 21。

提示:

  • 1 <= target.length <= 105
  • 1 <= target[i] <= 104
  • 1 <= k <= 104

解题思路

这道题考察的是对题目的理解程度,用数学的方法解题即可。

题目中要求我们将 k 个整数追加到 target 的末尾,使得 target 的最小和最小。我们可以先将 target 数组中的元素从小到大排序,然后将 k 个整数从小到大依次添加到 target 的末尾。这样,target 的最小和就等于 target 中前 k 个元素的和。

代码实现

def minimalKSum(target, k):
    """
    :type target: List[int]
    :type k: int
    :rtype: int
    """
    target.sort()
    sum = 0
    for i in range(len(target)):
        if target[i] <= k:
            sum += target[i]
            k += 1
        else:
            break
    return sum + k * (k - 1) // 2

复杂度分析

  • 时间复杂度:O(n log n),其中 n 是 target 数组的长度。
  • 空间复杂度:O(1)。

结语

这道题考察的是对题目的理解程度,用数学的方法解题即可。希望这篇题解对您有所帮助。