LeetCode 1423.可獲得的最大點數
阿新 • • 發佈:2021-02-07
技術標籤:刷題
難度:中等。
將這個問題轉換為查詢n-k個數字,使得剩餘數字之和最大。這樣需要維持n-k大小的滑動視窗。
超時程式碼:
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int n = cardPoints.size();
int win = n - k;
int left = 0, right = n - k - 1;
int res = 0;
while(right < n){
int temp = 0;
for(int i = 0; i < left; i++){
temp += cardPoints[i];
}
for(int i = right + 1; i < n; i++){
temp += cardPoints[i];
}
if(temp > res) res = temp;
left++;
right++ ;
}
return res;
}
};
我傻了,每次從頭開始算當前的值了,所以超時了。
正確程式碼:
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int n = cardPoints.size();
int win = n - k;
int left = 0, right = n - k - 1;
int temp = 0;
for(int i = 0; i < left; i++){
temp += cardPoints[i];
}
for(int i = right + 1; i < n; i++){
temp += cardPoints[i];
}
int res = temp;
while(true){
left++;
right++;
if(right == n)break;
temp += cardPoints[left - 1];
temp -= cardPoints[right];
if(temp > res) res = temp;
}
return res;
}
};