https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/
建议使用滑动窗口或者前缀和枚举。
class Solution {
public:
int maxScore(vector<int>& nums, int k) {
int n=nums.size();
vector<int> prefix_sum(n,0);
prefix_sum[0]=nums[0];
for(int i=1;i<n;i++){
prefix_sum[i]=prefix_sum[i-1]+nums[i];
}
int l=0,r=n-1;
int ans=0;
while(k){
int left_sum=0;
if(l-1<0)
left_sum=prefix_sum[l+k-1];
else
left_sum=prefix_sum[l+k-1]-prefix_sum[l-1];
int right_sum=0;
if(r-k<0)
right_sum=prefix_sum[r];
else
right_sum=prefix_sum[r]-prefix_sum[r-k];
if(left_sum>=right_sum){
ans+=nums[l];
l++;
}
else{
ans+=nums[r];
r--;
}
k--;
}
return ans;
}
};
本文介绍了一种使用滑动窗口和前缀和方法解决LeetCode上一道关于获取最大分数的贪心算法题目。通过计算左半部分和右半部分的总和,并选择较大的一部分进行累加,最终达到分数最大化。
242

被折叠的 条评论
为什么被折叠?



