zoukankan      html  css  js  c++  java
  • Candy

    There are N children standing in a line. Each child is assigned a rating value.

    You are giving candies to these children subjected to the following requirements:

    • Each child must have at least one candy.
    • Children with a higher rating get more candies than their neighbors.

    What is the minimum candies you must give?

    class Solution {
    public:
    //two pass, one from the left, other from the right. the left one find the least number of candy that needed according the the left side
    //right one find the least number of candy that needed according to the right side.
        int candy(vector<int>& ratings) {
            if (ratings.empty())
                return 0;
            if (ratings.size() == 1)
                return 1;
            int n = ratings.size();
            vector<int> candy(n,1);
            for(int i=1; i < n; i++){
                if (ratings[i] > ratings[i-1])
                    candy[i] = candy[i-1] + 1;
            }
            int total = candy[n-1];
            for(int i=n-2; i>=0; i--){
                if (ratings[i] > ratings[i+1])
                    candy[i] = max(candy[i], candy[i+1]+1);
                total += candy[i];
            }
            return total;
        }
    };
  • 相关阅读:
    go时间和日期转换
    go操作mysql
    Python常见错误处理
    C++ 常见问题
    CF605E Intergalaxy Trips
    均分纸牌详解
    P4447 [AHOI2018初中组]分组
    P4537 [CQOI2007]矩形
    P4823 [TJOI2013]拯救小矮人
    P5132 Cozy Glow之拯救小马国
  • 原文地址:https://www.cnblogs.com/sherylwang/p/5831086.html
Copyright © 2011-2022 走看看