原题链接:https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/
1、递归
int maxScore(vector<int>& cardPoints, int k) {
int size=cardPoints.size();
return score(cardPoints,0,size-1,k);
}
int score(vector<int>& cardPoints,int start,int end,int k){
if(k==0) return 0;
return max(cardPoints[start]+score(cardPoints,start+1,end,k-1),cardPoints[end]+score(cardPoints,start,end-1,k-1));
}
2、前缀后缀
相关题目:K 次串联后最大子数组之和
int maxScore(vector<int>& cardPoints, int k) {
int size=cardPoints.size();
vector<int> pre(size+1,0);
vector<int> pro(size+1,0);
int sum=accumulate(cardPoints.begin(),cardPoints.end(),0);
for(int i=1;i<=size;i++){
pre[i]=pre[i-1]+cardPoints[i-1];
pro[size-i+1]=sum-pre[i-1];
}
int ans=INT_MIN;
for(int i=0;i<=k;i++){
ans=max(ans,pre[i]+pro[k-i]);
}
return ans;
}