力扣刷题-135.分发糖果

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

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

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子评分更高的孩子会获得更多的糖果。

请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

int candy(vector& ratings) {
    int mint=ratings[0];
    int n=ratings.size(); 
    for(int i=0;ians(n,0); 
    //情况一:最小值和凹点的评分都为1
    for(int i=0;i0&&(iratings[i-1])
            ans[i]=max(ans[i-1]+1,ans[i]);
        else
            continue;
   }
   //情况三:这样"\"的斜坡,前一个比后一个大1
   for(int i=n-2;i>=0;i--){
      if(ratings[i]>ratings[i+1]){
           ans[i]=max(ans[i+1]+1,ans[i]); //遇到和"/"斜坡公共的凸点,取两者最大值
       }else
            continue;
   }
   int sum=0;
   for(int i=0;i

妙啊,又名资本家发工资算法

首先要发最少,设置在发工资和第一个最小之间取最小值

若没有凹点,也就是周围都一样评分,那么众生平等

若后面的大于前面的,则后加1,反之前加1

更新每一个人发的,最后将各个局部最小值求和

你可能感兴趣的:(C++练手,leetcode,算法,数据结构)