记账卡牌排成一行,每张卡牌都有一个对应的点数,点数由整数数组cardPoints给出。每次行动,你可以从行的开头或者结尾拿一张卡牌,最终你必须正好拿k张卡牌,你的点数就是你拿到手中的所有卡牌点数之和。
滑动窗口求解思路:由于只能在最开始和最末尾截取卡牌,从而可以看做将整数数组cardPoints连接成环状,k个元素必须包含元素的end或start中的一个,并不停滑动更新,寻找最值。
public int maxPoints(int []cardPoints,int k)
{
//首先先将开头到结尾的k个数字进行相加,而后进行滑动,并比较
int maxNum=0;
for(int i=0;i<k;i++)
{
maxNum+=cardPoints[i];
}
for(int i=0;i<k;i++)
{
maxNum=Math.max(maxNum,maxNum-nums[k-1+i]+nums[cardPoints.length-1-i]);
}
???????return maxNum;
}