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?

    题意:n 个小孩,每个小孩有一个评分。给小孩发糖。要求:

        1)每个小孩至少一颗糖

        2)评分高的小孩发的糖比他旁边两个小孩的多

    因此最少需要多少糖果才够分?

    解题思路:

      遍历两边,首先每个人得一块糖,第一遍从左到右,若当前点比前一个点高就比前者多一块。

    这样保证了在一个方向上满足了要求。第二遍从右往左,若左右两点,左侧高于右侧,但

    左侧的糖果数不多于右侧,则左侧糖果数等于右侧糖果数+1,这就保证了另一个方向上满足要求。

      最后将各个位置的糖果数累加起来就可以了。

    代码实现:

    class Solution {
    public:
        int candy(vector<int> &ratings) {
            int n=ratings.size();
            //candy set
            vector<int>Candy(n,1);
            //from left to right
            for(int i(0);i<n-1;i++){
                if(ratings[i+1]>ratings[i])
                    Candy[i+1]=Candy[i]+1;
            }
            //from right to left
            for(int j=n-1;j>0;j--){
                if(ratings[j-1]>ratings[j]&&Candy[j-1]<=Candy[j])
                    Candy[j-1]=Candy[j]+1;
            }
            //add all
            int sum(0);
            for(auto a:Candy)
                sum+=a;
            return sum;
        }
    };
  • 相关阅读:
    傻帽
    csc编译c#文件
    真空
    继承,多态及抽象性
    HASH算法
    正则表达式
    js向数组和map添加元素
    详解TypeScript项目中的tsconfig.json配置
    TS:元素隐式具有 “any“ 类型,因为类型为 “any“ 的表达式不能用于索引类型
    yarn基本命令
  • 原文地址:https://www.cnblogs.com/ktao/p/7821803.html
Copyright © 2011-2022 走看看