题目地址

解题思路

最近刷题有点失落,好几题都答不出来,好好积累经验吧。
根据题目要求:要求出最大的有效的分数,最大,可以将数组降序排列。接下来就是高潮部分了。假如我们的数组排序后是[9,8,2,1],cnt = 3,要按照3个分的话,是[9,8,2]不符合条件,所以是[9,8,1],就是将2移除,用2后面的值来代码。思路很清楚,代码不知道怎么写,看题解的代码

代码

  1. var maxmiumScore = function(cards, cnt) {
  2. const len = cards.length;
  3. cards.sort((a,b)=>b-a);
  4. let res = 0, lastodd = 0, lasteven = 0;
  5. for (let i = 0; i < cnt; i++){
  6. res += cards[i];
  7. if (cards[i] % 2 == 1) lastodd = cards[i];
  8. else lasteven = cards[i];
  9. }
  10. if (res % 2 == 0) return res;
  11. let max1 = 0, max2 = 0;
  12. for (let i = cnt; i < len; i++){
  13. if (lasteven && max1 == 0 && cards[i]%2) max1 = res - lasteven + cards[i];
  14. if (lastodd && max2 == 0 && cards[i]%2 == 0) max2 = res - lastodd + cards[i];
  15. }
  16. return Math.max(max1, max2);
  17. };
  18. const cards = [1,2,8,9], cnt = 2;
  19. const cards1 = [3,3,1], cnt1 = 1;
  20. console.log('-40-result--',maxmiumScore(cards,cnt));

代码分析

1.首先是取cnt个数组,如果此时和刚好为偶数,那么直接退出;在求值和时,记录一下最后一个出现的奇数、偶数

  1. 因为不满足条件,所以找替代值。遍历剩下的数组元素。如果当前的元素是奇数,那么第一个最大值为:res - 上一次最后的奇数 + 当前的项;如果当前的元素是偶数,那么最大的为:res - 上一次最后的偶数+card[i]