📅  最后修改于: 2023-12-03 15:21:59.099000             🧑  作者: Mango
给定一个整数数组 nums
和一个整数 K
,从数组的末尾开始,删除至少一个元素,直到删除后的数组中剩余元素之和至少减少 K
。请你找到此时最小的可能删除集合并返回其下标集合。题目保证删除后至少存在一个元素。
输入:[4,3,2,1], K = 1
输出:[0]
解释:数组的总和是 10,删除下标为 0 的 4 后,数组变成 [3,2,1],总和为 6,减少了 4,大于等于 K = 1,所以返回 [0]。
先计算整个数组的总和,然后从数组的末尾开始删除元素。如果删了某一个元素之后总和仍大于等于 K
,那么就说明删掉这个元素后会有一个大于等于 K
的减少量,就记录下需要删除的下标。
def del_min_sum(nums, K):
total_sum = sum(nums)
delete_indexes = []
cur_sum = total_sum
for i in range(len(nums) - 1, -1, -1):
cur_sum -= nums[i]
if total_sum - cur_sum >= K:
delete_indexes.append(i)
total_sum -= nums[i]
return delete_indexes[::-1]
时间复杂度:$O(n)$。需要遍历整个数组一遍。
空间复杂度:$O(1)$。只需要常数级别的额外空间。