题目
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组
cardPoints
给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿
k
张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。
给你一个整数数组
cardPoints
和整数k
,请你返回可以获得的最大点数。
解题思路
- 先从一边获取所有卡片;
- 逐个替换成另一侧的卡片;
- 每次替换后比较大小选择最大值;
代码展示
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;}
}