zoukankan      html  css  js  c++  java
  • LeetCode做题笔记-135

    题目描述

    老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。

    你需要按照以下要求,帮助老师给这些孩子分发糖果:

    每个孩子至少分配到 1 个糖果。
    评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。
    那么这样下来,老师至少需要准备多少颗糖果呢?

    示例

    输入:[1,0,2]
    输出:5

    思路

    贪心思想,两次遍历

    AC代码 C++

    class Solution {
    public:
        int candy(vector<int>& ratings) {
            //两次遍历,贪心
            int l = ratings.size();
            if(l<2){
                return l;
            }
            vector<int> s(l,1);
            for(int i = 1; i < l; ++i){
                if(ratings[i] > ratings[i-1]){
                    s[i] = s[i-1]+1;
                }
            }
            for(int i = l-1; i > 0; --i){
                if(ratings[i] < ratings[i-1]){
                    s[i-1] = max(s[i-1],s[i]+1);
                }
            }
            //accumulate累加求和函数
            return accumulate(s.begin() , s.end() , 0);
        }
    };
    
  • 相关阅读:
    java后端
    2017-12-11
    二叉树与分治法整理
    javaweb
    安装docker
    爬虫
    lintcode
    DEEPlearning
    剑指offer_by牛客网
    DFS
  • 原文地址:https://www.cnblogs.com/RpgMaker/p/14406145.html
Copyright © 2011-2022 走看看