22: Candy

来源:互联网 发布:众筹源码 编辑:程序博客网 时间:2024/05/21 12:47

注:本题的解法思想及代码参考了网址https://github.com/soulmachine/leetcode#leetcode题解

题目: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?

解题代码如下:

//时间复杂度O(n),空间复杂度O(n)class Solution {public:        int candy(vector<int>& ratings) {                const int n = ratings.size()                vector<int> increment(n);                //左右各扫描一遍                for (int i = 1, inc = 1; i < n; ++i)                        if (ratings[i] > ratings[i - 1])                                increment[i] = max(inc++, increment[i])                        else                                inc = 1;                for (int i = n - 2, inc = 1; i >= 0; --i)                        if (ratings[i] > ratings[i + 1])                                incremet[i] = max(inc++, increment[i]);                        else                                inc = 1;                //初始值为 n, 因为每一个小朋友至少一颗糖                return accumulate(increment.begin(), increment.end(), n);        }};
0 0
原创粉丝点击