classSolution:
defmaxmiumScore(self, cards: List[int], cnt: int) -> int:
cards.sort(reverse=True)
# 前 cnt 数字之和、最小偶数、最小奇数
s, even, odd = 0, 0, 0for i inrange(cnt):
s += cards[i]
if cards[i] % 2 == 0:
even = cards[i]
else:
odd = cards[i]
if s % 2 == 0: # 前 cnt 个数字和为偶数return s
if cnt == len(cards):
return0# 用 [cnt:] 中的最大偶数替代 [:cnt] 中最小奇数 odd# 用 [cnt:] 中的最大奇数替代 [:cnt] 中最小偶数 even
ans = 0if cards[cnt] % 2 == 0: # 只需找最大奇数
ans = s - odd + cards[cnt]
if even != 0: # 前面有偶数
ans = max(ans, s - even + self.find(cards[cnt + 1:], 1))
else: # 只需找最大偶数if even != 0:
ans = s - even + cards[cnt]
ans = max(ans, s - odd + self.find(cards[cnt + 1:], 0))
return ans
deffind(self, arr: List[int], flag: int) -> int:
for x in arr:
if x % 2 == flag:
return x
return0
classSolution {
publicintmaxmiumScore(int[] cards, int cnt) {
Arrays.sort(cards);
intn= cards.length, s = 0, even = 0, odd = 0;
for(inti= n - 1; i > n - 1 - cnt; i--) {
s += cards[i];
if(cards[i] % 2 == 0) even = cards[i];
elseodd= cards[i];
}
if(s % 2 == 0) return s;
if(cnt == cards.length) return0;
intans=0, end = n - 1 - cnt;
if(cards[end] % 2 == 0) {
ans = s - odd + cards[end];
if(even != 0) // s 中不一定存在偶数
ans = Math.max(ans, s - even + find(cards, end - 1, 1));
} else {
if(even != 0) // s 中不一定存在偶数
ans = s - even + cards[end];
ans = Math.max(ans, s - odd + find(cards, end - 1, 0));
}
return ans;
}
staticintfind(int[] arr, int start, int type) {
while(start >= 0 && arr[start] % 2 != type) start--;
returnstart== -1 ? 0 : arr[start];
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)