解题思路
最近刷题有点失落,好几题都答不出来,好好积累经验吧。
根据题目要求:要求出最大的有效的分数,最大,可以将数组降序排列。接下来就是高潮部分了。假如我们的数组排序后是[9,8,2,1],cnt = 3,要按照3个分的话,是[9,8,2]不符合条件,所以是[9,8,1],就是将2移除,用2后面的值来代码。思路很清楚,代码不知道怎么写,看题解的代码
代码
var maxmiumScore = function(cards, cnt) {
const len = cards.length;
cards.sort((a,b)=>b-a);
let res = 0, lastodd = 0, lasteven = 0;
for (let i = 0; i < cnt; i++){
res += cards[i];
if (cards[i] % 2 == 1) lastodd = cards[i];
else lasteven = cards[i];
}
if (res % 2 == 0) return res;
let max1 = 0, max2 = 0;
for (let i = cnt; i < len; i++){
if (lasteven && max1 == 0 && cards[i]%2) max1 = res - lasteven + cards[i];
if (lastodd && max2 == 0 && cards[i]%2 == 0) max2 = res - lastodd + cards[i];
}
return Math.max(max1, max2);
};
const cards = [1,2,8,9], cnt = 2;
const cards1 = [3,3,1], cnt1 = 1;
console.log('-40-result--',maxmiumScore(cards,cnt));
代码分析
1.首先是取cnt个数组,如果此时和刚好为偶数,那么直接退出;在求值和时,记录一下最后一个出现的奇数、偶数
- 因为不满足条件,所以找替代值。遍历剩下的数组元素。如果当前的元素是奇数,那么第一个最大值为:res - 上一次最后的奇数 + 当前的项;如果当前的元素是偶数,那么最大的为:res - 上一次最后的偶数+card[i]