1423. 可获得的最大点数 --力扣 --JAVA
题目
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组
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;
}
}