LeetCode a une question par jour 1423. Le nombre maximum de points pouvant être obtenus

1423. Maximum de points disponibles

Plusieurs cartes sont disposées dans une rangée, et chaque carte a un point correspondant. Points un tableau d'entiers cardPointsest donné.

À chaque action, vous pouvez prendre une carte depuis le début de la fin de la ligne ou, éventuellement, vous devez simplement prendre des kcartes.

Vos points sont la somme des points de toutes les cartes de votre main.

Pour vous donner un tableau d'entiers cardPointset d'entiers k, veuillez renvoyer le nombre maximum de points que vous pouvez obtenir.

Exemple 1:

输入:cardPoints = [1,2,3,4,5,6,1], k = 3
输出:12
解释:第一次行动,不管拿哪张牌,你的点数总是 1 。但是,先拿最右边的卡牌将会最大化你的可获得点数。最优策略是拿右边的三张牌,最终点数为 1 + 6 + 5 = 12

Exemple 2:

输入:cardPoints = [2,2,2], k = 2
输出:4
解释:无论你拿起哪两张卡牌,可获得的点数总是 4

Exemple 3:

输入:cardPoints = [9,7,7,9,7,7,9], k = 7
输出:55
解释:你必须拿起所有卡牌,可以获得的点数为所有卡牌的点数之和。

Exemple 4:

输入:cardPoints = [1,1000,1], k = 1
输出:1
解释:你无法拿到中间那张卡牌,所以可以获得的最大点数为 1

Exemple 5:

输入:cardPoints = [1,79,80,1,1,1,200,1], k = 3
输出:202

rapide:

  • 1 <= cardPoints.length <= 10^5
  • 1 <= cardPoints[i] <= 10^4
  • 1 <= k <= cardPoints.length

Première méthode: fenêtre coulissante

Idées de résolution de problèmes

  • Toujours penser fenêtre coulissante, en supposant acquérir une kcarte de gauche , et le nombre de points à l'esprit à faire pre, donc les résultats ans = pre.
  • Puis déplacez la "fenêtre" et soustrayez les points de la carte à gauche à chaque fois; ajoutez les points de la carte à droite pour obtenir la nouvelle somme de points pre, doncans = max(ans, pre)
  • Répétez les étapes précédentes pour karriver à la plus grande somme de points.

Code de référence

public int maxScore(int[] cardPoints, int k) {
    
    
    int n = cardPoints.length;
    int pre = 0;
    for (int i = 0; i < k; i++) {
    
    
        pre += cardPoints[i];
    }
    int ans = pre;
    for (int i = n - 1; i >= n - k; i--) {
    
    
        pre = pre + cardPoints[i] - cardPoints[k + i - n];
        ans = Math.max(ans, pre);
    }
    return ans;
}

Résultats de la
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_27007509/article/details/113716404
conseillé
Classement