zoukankan      html  css  js  c++  java
  • [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;
        }
    };
  • 相关阅读:
    Don't Dismiss Georgia Tech's $6,600 Online Master's Degree
    Java SPI机制学习笔记
    Java SPI机制简介
    Java SPI机制
    Java SPI机制原理和使用场景
    中文代码之Spring Boot集成H2内存数据库
    H2数据库攻略
    JAVA 项目中使用 H2 数据库
    Java内存数据库-H2介绍及实例(SpringBoot)
    内存数据库-H2简介与实践
  • 原文地址:https://www.cnblogs.com/x1957/p/3371601.html
Copyright © 2011-2022 走看看