• [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;
        }
    };
  • 相关阅读:
    058:表关系之一对一
    057:表关系之一对多
    056:ORM外键删除操作详解
    055:ORM外键使用详解
    054:Meta类中常见配置
    053:Field的常用参数详解:
    052:ORM常用Field详解(3)
    051:ORM常用Field详解(2)
    C#中在WebClient中使用post发送数据实现方法
    C# WebClient类上传和下载文件
  • 原文地址:https://www.cnblogs.com/x1957/p/3371601.html
Copyright © 2020-2023  润新知