📌  相关文章
📜  求数组中 N-1 个元素的最小和最大和(1)

📅  最后修改于: 2023-12-03 15:40:41.784000             🧑  作者: Mango

求数组中 N-1 个元素的最小和最大和

在解决算法问题时,经常需要求一个数组中 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]

该代码以去掉第一个元素计算最大和为例,可以轻松更改为去掉最后一个元素计算最小和。