[leetcode] Candy


題目大概意思就是給你一些孩子的rating,這些孩子站成一個直線,相鄰的孩子rating高的一定要比rating低的孩子的candy多

所有孩子至少有一個candy。

問最少發多少個candy(好摳)

 

最少呢,我們當然就是保證再滿足限制條件下盡量少發candy給孩子。

那限制條件當然來自相鄰的孩子。

如果我比你高,我就比你多1,最低的孩子為1.

從左往右掃瞄一次,波谷為1,然后依次加1到波峰,再到波谷時又是1

這樣就滿足所有rating高的比左邊rating低的孩子的candy多了。

然后再從右往左來一次,一樣的,不弱還要多個條件就是,因為剛才算了一次candy[i]了

這次candy[i]要取最大的才能同同時滿足這兩個條件。

然后就ok啦,兩邊都滿足了!

 

class Solution {
public:
    int candy(vector<int> &ratings) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        int  cap = ratings.size();
        int* candy = new int[cap];
        fill(candy , candy + cap , 0);
        
        int k = 1;
        for(int i = 1 ; i < cap ; i++){
            if(ratings[i] > ratings[i - 1]){
                candy[i] = max(k++ , candy[i]);
            }else{
                k = 1;
            }
        }
        k = 1;
        for(int i = cap -2 ; i >= 0 ; i --){
            if(ratings[i] > ratings[i + 1]){
                candy[i] = max(k++ , candy[i]);
            }else{
                k = 1;
            }
        }
        int ans = cap;
        for(int i = 0 ; i < cap ; i++) ans += candy[i];
        
        return ans;
    }
};

  

 

PS。new的candy數組一定要初始化啊,我以為會初始化為0,然后莫名的錯了幾次

 

class Solution {
public:
    int candy(vector<int> &ratings) {
        vector<int> candy(ratings.size(), 1);
        int height = 1;
        for (int i = 1; i < ratings.size(); i++) {
            if (ratings[i] > ratings[i - 1]) {
                candy[i] = max(++height, candy[i]);
            } else {
                height = 1;
            }
        }
        height = 1;
        for (int i = ratings.size() - 2; i >= 0; i--) {
            if (ratings[i] > ratings[i + 1]) {
                candy[i] = max(++height, candy[i]);
            } else {
                height = 1;
            }
        }
        int ans = 0;
        for (int i = 0; i < ratings.size(); i++) {
            ans += candy[i];
        }
        return ans;
    }
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM