可获得的最大点数

可获得的最大点数

几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。

每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。

给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。

题解
滑动窗口
由题可知,首先想到每次拿开头或者结尾,选择到最大的点数,就有点头疼了 因为不知道拿开头或者结尾,每次拿的地方不固定,那我们就找一个固定的, 固定的就是剩下的长度一定是len-k,每次从开头或者结尾拿我们不管,
但是确定的是一定会剩下一个连续的子数组,题目要求是找到最大的点数, 那么我们就需要挑出其中最小的连续子数组即可

public class maxScore {

    public static int maxScore(int[] cardPoints,int k){
        int len=cardPoints.length;
        int sum=0;
        for (int i=0;i<cardPoints.length;i++){
            sum+=cardPoints[i];
        }
        int lenght=len-k;
        int min=Integer.MAX_VALUE;
        int temp=0;
        for (int i=0;i<cardPoints.length;i++){
            temp+=cardPoints[i];
            if (i>=lenght){
                temp-=cardPoints[lenght-i];
            }
            if (i>=lenght-1){
                min=Math.min(min,temp);
            }
        }
        return sum-min;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_30926503/article/details/107577753
今日推荐