📅  最后修改于: 2023-12-03 15:27:35.975000             🧑  作者: Mango
编写一个函数,给定一个包含n个整数的数组a和两个整数l和r,该函数应返回在[l, r]范围内的数字中的最大奇数和。如果没有奇数,则返回0。
def max_odd_sum(a: List[int], l: int, r: int) -> int:
pass
assert max_odd_sum([1, 2, 3, 4, 5, 6, 7, 8, 9], 2, 5) == 9
assert max_odd_sum([2, 4, 6, 8, 10], 1, 5) == 0
assert max_odd_sum([3, 4, 5, 6, 7], 1, 3) == 5
对于[l, r] 范围内的数字中的最大奇数和,我们可以先将[l, r] 区间的数分解成奇数和偶数。
然后将奇数从大到小排序,累加相邻的奇数即可。
from typing import List
def max_odd_sum(a: List[int], l: int, r: int) -> int:
# 获取 [l, r] 区间内的奇数
odd = [x for x in a[l - 1: r] if x % 2 == 1]
# 如果区间内没有奇数,返回 0
if not odd:
return 0
# 奇数从大到小排序
odd.sort(reverse=True)
# 累加相邻奇数
return sum(odd[i] for i in range(len(odd)) if i % 2 == 0)