题目
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组
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; } }