📅  最后修改于: 2023-12-03 15:40:41.784000             🧑  作者: Mango
在解决算法问题时,经常需要求一个数组中 N-1 个元素的最小和最大和,即去掉某一个元素后的数组元素的和的最小值和最大值。下面给出两种通用的解法。
一种显而易见的想法是先把数组排序,然后去掉最小或最大元素即可。该方法的时间复杂度为 $O(n \log n)$,其中 $n$ 是数组长度。具体实现如下所示:
def min_max_sum(arr):
arr.sort()
return sum(arr[:-1]), sum(arr[1:])
该代码以升序排序为例,可以轻松更改为降序排序。
另一种方法是遍历数组,同时计算出去掉每个元素后的和的最小值和最大值,最终得到结果。该方法的时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。具体实现如下:
def min_max_sum(arr):
min_sum, max_sum = float('inf'), float('-inf')
cur_sum = 0
for num in arr:
cur_sum += num
min_sum = min(min_sum, cur_sum)
max_sum = max(max_sum, cur_sum)
return max_sum - arr[0], min_sum - arr[-1]
该代码以去掉第一个元素计算最大和为例,可以轻松更改为去掉最后一个元素计算最小和。