返回
利用数学方法实现 leetcode 2195. Append K Integers With Minimal Sum
后端
2023-09-30 18:35:44
前言
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)。
结语
这道题考察的是对题目的理解程度,用数学的方法解题即可。希望这篇题解对您有所帮助。