1. 程式人生 > 其它 >LeetCode 1423.可獲得的最大點數

LeetCode 1423.可獲得的最大點數

技術標籤:刷題

難度:中等。

將這個問題轉換為查詢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; } };

在這裡插入圖片描述