135. Candy

来源:互联网 发布:java开发面试常问问题 编辑:程序博客网 时间:2024/05/22 17:50

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?

正序遍历,大的+1,

逆序遍历,取最大的


c++版本:

class Solution {public:    int candy(vector<int>& ratings) {        if(ratings.size()<=1)            return ratings.size();        vector<int> nums(ratings.size(),1);        for(int i=1;i<nums.size();i++)            if(ratings[i]>ratings[i-1])                nums[i]=nums[i-1]+1;        for(int i=nums.size()-1;i>=1;i--)            if(ratings[i-1]>ratings[i])                nums[i-1]=max(nums[i]+1,nums[i-1]);        int sum=0;        for(int num:nums)            sum+=num;        return sum;    }};


python3版本:

class Solution:    def candy(self, ratings):        """        :type ratings: List[int]        :rtype: int        """        res=[1]*len(ratings)        lbase=rbase=1        for i in range(1,len(ratings)):            lbase=lbase+1 if ratings[i]>ratings[i-1] else 1            res[i]=lbase        for i in range(len(ratings)-2,-1,-1):            rbase=rbase+1 if ratings[i]>ratings[i+1] else 1            res[i]=max(res[i],rbase)        return sum(res)