题目:
"""
给出一个由非负整数组成的序列 A =(A1,A2,A3,....,Av)。这个序列的长度为N判断是否存在一个偶数可以表示为在A中两个不同元素的和。若存在,找到最大的偶数,否则输出”-1”
序列A中的所有元素两两不同
所有的输入均为整数
"""
暴力解法:
# 暴力解法
n = int(input())
A = list(map(int, input().split()))
A.sort()
max_even = -1
for i in range(n):
for j in range(i + 1, n):
if (A[i] + A[j]) % 2 == 0:
max_even = max(max_even, A[i] + A[j])
print(max_even)
优化解法:
# 优化解法
def find_largest_even_sum(A):
# 初始化最大的偶数和最大的奇数以及它们的次大值
# 初始值设置为-1,以便在数组中找不到偶数或奇数时可以识别
max_even = max_odd = second_max_even = second_max_odd = -1
# 开始遍历整个数组A中的每个数字
for number in A:
# 如果当前数字是偶数
if number % 2 == 0:
# 检查是否需要更新最大的偶数或次大的偶数
if number > max_even:
# 如果当前数字大于最大的偶数,更新最大和次大偶数
second_max_even, max_even = max_even, number
elif number > second_max_even:
# 如果当前数字不是最大的,但大于次大的偶数,更新次大偶数
second_max_even = number
# 如果当前数字是奇数
else:
# 检查是否需要更新最大的奇数或次大的奇数
if number > max_odd:
# 如果当前数字大于最大的奇数,更新最大和次大奇数
second_max_odd, max_odd = max_odd, number
elif number > second_max_odd:
# 如果当前数字不是最大的,但大于次大的奇数,更新次大奇数
second_max_odd = number
# 计算可能的最大偶数和
# 如果存在次大偶数,则计算最大偶数和次大偶数的和;否则设置为-1表示不存在偶数和
largest_even_sum = max_even + second_max_even if second_max_even != -1 else -1
# 计算可能的最大奇数和
# 如果存在次大奇数,则计算最大奇数和次大奇数的和;否则设置为-1表示不存在奇数和
largest_odd_sum = max_odd + second_max_odd if second_max_odd != -1 else -1
# 返回两者中较大的一个,即可能的最大偶数和
# 如果两者都是-1,则返回-1表示没有找到任何符合条件的偶数和
return max(largest_even_sum, largest_odd_sum)
n = int(input())
A = map(int, input().split())
print(find_largest_even_sum(A)) # 输出最大的偶数和或者-1