leetcode1052_愛生氣的書店老闆_滑動窗口

1. 這題其實最關鍵的是轉換思路. 不生氣時間段的人數和都是固定的, 所以題目的意思是讓求連續X時間段內生氣的人數和的最大值.

2. 可以運用滑動窗口.看窗口大小爲X的窗口內,不生氣的人數和的最大值是多少.

class Solution {
public:
    int maxSatisfied(vector<int>& customers, vector<int>& grumpy, int X) {
        int left=0,right=0;
        int ans1=0, ans2=0;
        int tmp=0;
        while(right<customers.size()) {
            //不生氣的人數全部都要加上.
            if(grumpy[right]==0) ans1 += customers[right];
            //生氣的人數由tmp計算.
            else tmp += customers[right];
            //當窗口大小不滿足條件時,需要縮小窗口.
            if(right-left+1>X) {
                //只有當left值爲1時,才需要將原先加上的值去掉.
                if(grumpy[left]==1) tmp -= customers[left];
                left++;    
            }
            right++;
            //找到每一個窗口的最大值,防止出現[3]這樣一個值的情況,
            //不經過while循環.
            ans2 = max(tmp, ans2);
        }
        //最大值爲不生氣人數加上生氣人數最大值.
        return ans1+ans2;
    }
};

發佈了95 篇原創文章 · 獲贊 26 · 訪問量 2127
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章