搜网站网,商洛网站建设哪家好,网站建设 中山,为企业做贡献的句子题目#xff1a; 心算项目的挑战比赛中#xff0c;要求选手从N张卡牌中选出cnt张卡牌#xff0c;若这cnt张卡牌数字总和为偶数#xff0c;则选手成绩「有效」且得分为cnt张卡牌数字总和。给定数组cards和cnt#xff0c;其中cards[i]表示第i张卡牌上的数字。 请帮参赛选手计…题目 心算项目的挑战比赛中要求选手从N张卡牌中选出cnt张卡牌若这cnt张卡牌数字总和为偶数则选手成绩「有效」且得分为cnt张卡牌数字总和。给定数组cards和cnt其中cards[i]表示第i张卡牌上的数字。 请帮参赛选手计算最大的有效得分。若不存在获取有效得分的卡牌方案则返回0。
示例
输入 输出 解释cards [1,2,8,9]cnt 318选择数字为 1、8、9 的这三张卡牌此时可获得最大的有效得分 18918。cards [3,3,1]cnt 10不存在获取有效得分的卡牌方案。
提示
1cntcards.length10^51cards[i]1000
题解
思路 将 cards 从大到小排序后先贪心的将后 cnt 个数字加起来若此时 sum 为偶数直接返回即可。若此时答案为奇数有两种方案: 在数组前面找到一个最大的奇数与后 cnt 个数中最小的偶数进行替换 在数组前面找到一个最大的偶数与后 cnt 个数中最小的奇数进行替换。
代码Python
def leet_code(cards, cnt):cards.sort(reverseTrue) # 排序从大到小、left, right cards[0:cnt], cards[cnt:]num sum(left)if num % 2 0:return numif num % 2 ! 0 and len(cards) cnt:return 0odd, even 0, 0for i in right: # 剩余数据的最大奇数和最大偶数if odd 0 and i % 2 ! 0:odd iif even 0 and i % 2 0:even ians list()for i in left: # 所有和的可能ans.append(num - i odd)ans.append(num - i even)ans.sort(reverseTrue)for i in ans: # 返回最大偶数if i % 2 0:return iif __name__ __main__:cards [1, 2, 8, 9]cnt 3res leet_code(cards, cnt)print(res)总结
题目内容来源于leetcode链接心算挑战