📅  最后修改于: 2023-12-03 14:51:28.651000             🧑  作者: Mango
在给定的未排序数组中,需要找到最大的数字对之和。
最简单直接的做法是通过两层循环枚举所有数字对,计算它们的和并更新最大值。
def find_max_pair_sum(arr):
n = len(arr)
max_sum = float('-inf')
for i in range(n-1):
for j in range(i+1, n):
if arr[i] + arr[j] > max_sum:
max_sum = arr[i] + arr[j]
return max_sum
通过将数组排序,可以将最大的数字对移动到数组两端,然后使用指针从两端向中心移动来计算最大的数字对之和。
def find_max_pair_sum(arr):
arr.sort()
left, right = 0, len(arr) - 1
max_sum = float('-inf')
while left < right:
cur_sum = arr[left] + arr[right]
if cur_sum > max_sum:
max_sum = cur_sum
left += 1
right -= 1
return max_sum
可以在单次遍历数组时记录最大数和次大数,然后计算它们的和即可。
def find_max_pair_sum(arr):
max_num, second_max = float('-inf'), float('-inf')
for num in arr:
if num > max_num:
second_max = max_num
max_num = num
elif num > second_max:
second_max = num
return max_num + second_max