做网站推广 优帮云,网站建立计划书,wordpress健身房主题,支付网站模板几张卡牌 排成一行#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
每次行动#xff0c;你可以从行的开头或者末尾拿一张卡牌#xff0c;最终你必须正好拿 k 张卡牌。
你的点数就是你拿到手中的所有卡牌的点数之和。
给你一个整数数组 cardPoi…几张卡牌 排成一行每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。
每次行动你可以从行的开头或者末尾拿一张卡牌最终你必须正好拿 k 张卡牌。
你的点数就是你拿到手中的所有卡牌的点数之和。
给你一个整数数组 cardPoints 和整数 k请你返回可以获得的最大点数。
示例 1
输入cardPoints [1,2,3,4,5,6,1], k 3 输出12 解释第一次行动不管拿哪张牌你的点数总是 1 。但是先拿最右边的卡牌将会最大化你的可获得点数。最优策略是拿右边的三张牌最终点数为 1 6 5 12 。
代码
class Solution {public int maxScore(int[] cardPoints, int k) {//将题目转化为求累加和最小的滑动窗口int l0,r0,ncardPoints.length,tarn-k,cur0;for(;rtar;r)//初始化第一个滑动窗口curcardPoints[r];int rescur;while (rn){cur-cardPoints[l];curcardPoints[r]; res Math.min(res,cur);}int sumArrays.stream(cardPoints).sum();return sum-res;}
}