这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » candy

共1条 1/1 1 跳转至

candy

高工
2018-01-30 12:10:14     打赏

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个孩子站成一排,每个孩子分配一个分值,给这些孩子派发糖果,
满足如下:
每个孩子至少一个,分值更高的孩子比他的相邻位的孩子获得更多的糖果
    求至少分发多少个糖果?

思路:

从左到右遍历,保证该方向上分数更大的获得的糖果更多;

从右到左遍历,保证这个方向上分数更大的获得的糖果跟多;


[cpp] view plain copy
  1. class Solution  

  2. {  

  3. public:  

  4.     int candy(vector<int>& ratings)  

  5.     {  

  6.         int len = ratings.size();  

  7.         if (len==1)  

  8.         {  

  9.             return 1;  

  10.         }  

  11.   

  12.         int sum = 0;  

  13.         vector<int> tmpVec(len, 1); //初始化每个孩子的糖果数设置为1  

  14.   

  15.         //从左扫描  

  16.         for (int i=1; i<len; i++)  

  17.         {  

  18.             if (ratings[i]>ratings[i-1])  

  19.             {  

  20.                 tmpVec[i] = tmpVec[i - 1] + 1;  

  21.             }  

  22.         }  

  23.   

  24.         //从右向左  

  25.         for (int i=len-2; i>=0; i--)  

  26.         {  

  27.             if (ratings[i]>ratings[i + 1] && tmpVec[i] <= tmpVec[i + 1])  

  28.             {  

  29.                 tmpVec[i] = tmpVec[i + 1] + 1;  

  30.             }  

  31.         }  

  32.   

  33.         for (int i=0; i<len; i++)  

  34.         {  

  35.             sum += tmpVec[i];  

  36.         }  

  37.   

  38.         return sum;  

  39.     }  

  40. }; 




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]