码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode之小孩分糖果

时间:2017-04-29 21:08:14      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:ios   name   str   can   ++   更改   i+1   从右到左   身边   

给定一群站好队的小孩而且按某项分值排名(姑且如果为年龄吧),年龄大的要比他身边年龄小的拿的糖要多。求怎么分配糖果使得分配的糖果数最少。

用一个数组从左到右再从右到左的遍历,向前遍历时若右边的比左边的大则其值为前一个糖果数+1,向后遍历时则推断假设比后面的小孩的年龄要大且糖果数比其还少则更改其糖果数为后面小孩分的糖果数+1.

详细描写叙述代码:

#include<iostream>
#include<vector>

using namespace std;

int candy(vector<int> &a){
     int len=a.size();
   if(len==0||len==1)
   return len;
   
   int sum=0;
   int *candys = new int[len];
   candys[0]=1;
   for(int i=1;i<len;i++)
   {
     if(a[i]>a[i-1])
      candys[i]=candys[i-1]+1;
     else 
      candys[i]=1;
   }
   sum=candys[len-1];
   for(int i=len-2;i>=0;i--)
   {
      if( a[i]>a[i+1] && ( candys[i+1]+1 > candys[i] ))
      candys[i]=candys[i+1]+1;
      sum+=candys[i];
   }
   return sum;
}

int main()
{
  int Array[]={4,2,3,4,1};
  vector<int> c(Array,Array+5);  
  cout<<candy(c)<<endl;

}


LeetCode之小孩分糖果

标签:ios   name   str   can   ++   更改   i+1   从右到左   身边   

原文地址:http://www.cnblogs.com/lytwajue/p/6786036.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!