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?

class Solution {

public:

    int candy(vector<int> &ratings) 

    {

        int n=ratings.size();

        if(n<2) return n;

        

        int candys[n];

        for(int i=0;i<n;i++) candys[i]=0;

        

        int cnt=0;

        while(cnt<n)

        {

            for(int i=0;i<n;i++)

            if(candys[i]==0)

            {

                if((i==0 && (ratings[i+1]>=ratings[i]||candys[i+1]>0)) 

                || (i==n-1 && (ratings[i-1]>=ratings[i] || candys[i-1]>0)))

                {

                    if(i==0)

                    {

                        if(ratings[1]==ratings[0]) candys[0]=1;

                        else candys[0]=candys[1]+1;

                    }

                    else

                    {

                        if(ratings[n-1]==ratings[n-2]) candys[n-1]=1;

                        else candys[n-1]=candys[n-2]+1;

                    }

                    cnt++;

                    if(i>0 && candys[i-1]==0) i=i-2;

                    continue;

                }

                if(i>0 && i<n-1 && 

                (candys[i-1]>0 || ratings[i-1]>=ratings[i]) && (candys[i+1]>0  || ratings[i+1]>=ratings[i]))

                {

                    candys[i]=1;

                    if(ratings[i-1]<ratings[i]) candys[i]=candys[i-1]+1;

                    if(candys[i]<=candys[i+1] && ratings[i+1]<ratings[i])

                        candys[i]=candys[i+1]+1;

                    cnt++;

                    if(i>0 && candys[i-1]==0) i=i-2;

                    continue;

                }

            }

        }

        int sum=0;

        for(int i=0;i<n;i++) sum=sum+candys[i];

        return sum;

    }

};

 

你可能感兴趣的:(ca)