1957

无聊蛋疼的1957写的低端博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[leetcode] Candy

Posted on 2013-10-16 10:02  1957  阅读(3830)  评论(0编辑  收藏  举报

题目大概意思就是给你一些孩子的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;
    }
};