1423. 可获得的最大点数 --力扣 --JAVA

题目

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

每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。

你的点数就是你拿到手中的所有卡牌的点数之和。

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

解题思路

  1. 先从一边获取所有卡片;
  2. 逐个替换成另一侧的卡片;
  3. 每次替换后比较大小选择最大值;

代码展示

class Solution {
    public int maxScore(int[] cardPoints, int k) {
        int ans = 0;
        //先全部从左边取值
        for (int i = 0; i < k; i++){
            ans += cardPoints[i];
        }
        int n = cardPoints.length;
        int index = 1;
        int temp = ans;
        while (index <= k){
            //逐个替换成右边值再比较
            temp = temp - cardPoints[k - index] + cardPoints[n - index];
            ans = Math.max(ans, temp);
            index++;
        }
        return ans;
    }
}

你可能感兴趣的:(力扣练习,算法,数据结构)