zoukankan      html  css  js  c++  java
  • 【LeetCode练习题】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个小孩站成一条直线,每一个小孩都有一个等级的属性。按下面要求给小孩分糖果:

    • 每一个小孩都必须有至少一个糖。
    • 相邻的等级高的小孩得到更多的糖果。(相对他的前后的人)

    求你最少要给出去多少个糖果。

     

    解题思路:

    N个小孩加上属性的话,有点类似于骆驼背的那种形状。我们新建一个用来表示每个小孩得多少糖果的大小为N的vector,和题目中给的等级vector对应。

    然后两次遍历原有的vector,第一遍从前面向后面遍历,第二遍从后往前。

    第一遍的目的是保证队伍后面的人如果比前面的人等级高的话,后面的人的糖果比前面的人多一个,否则后面的人糖果设为1个。

    但是假如有类似于  3 4 5 4 3 这种等级分布的话,第一遍遍历后result变成了 1 2 3 1 1 ,而事实上应该是 1 2 3 2 1 ,第一遍遍历时没有考虑到后两个应该是递减的关系,所以第二遍遍历的目的就是处理这种本来应该是递减顺序全都成了1的情况。

     

    代码如下:

     

     1 class Solution {
     2 public:
     3     int candy(vector<int> &ratings) {
     4         int len = ratings.size();
     5         vector<int> result(len,1);
     6         
     7         int ret = 0;
     8         if(len == 0){
     9             return ret;
    10         }
    11         //第一遍
    12         for(int i = 1; i < len; i++){
    13             if(ratings[i] > ratings[i-1]){
    14                 result[i] = result[i-1] +1;
    15             }
    16         }
    17         //第二遍
    18         ret = result[len - 1];
    19         for(int i = len - 2; i >= 0; i--){
    20             if(ratings[i] > ratings[i+1]){
    21                 result[i] = max(result[i],result[i+1]+1);
    22             }
    23             ret += result[i];
    24         }
    25 
    26         vector<int>::iterator it = result.begin();
    27         for(; it != result.end();it++){
    28             cout << *it << "--";
    29         }
    30         return ret;
    31     }
    32 };

     

  • 相关阅读:
    ASP.NET MVC2 in Action 读书笔记 [121] Custom Ajax
    [转] 浅谈 MVC3 WebMail 发送邮件
    JQuery学习笔记 (3)
    ASP.NET MVC2 in Action 读书笔记 [1]
    [转] 在ASP.NET MVC3中使用EFCodeFirst 1.0
    LINQ ForEach
    JQuery学习笔记 [Ajax实现新闻点评功能] (63)
    [转] .NET2005下单元测试中Assert类的用法
    [转] ASP.NET MVC3 路由和多数据集的返回
    ASP.NET MVC2 in Action 读书笔记 [124] MVC Ajax Helpers
  • 原文地址:https://www.cnblogs.com/4everlove/p/3639187.html
Copyright © 2011-2022 走看看