Leetcode:Candy
2018-01-07 10:56
225 查看
Leetcode: candy
There are N children standing in a line. Each child is assigned arating value.
You are giving candies to these children subjected to the followingrequirements:
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?
思路:
因为每个人最少得到一个糖果,初始化Num_arr[]为1,表示每个人得到的起始糖果为1。
然后从起始到末尾遍历ratings数组,假如第i个的rating value比i-1的大,就将此rating value代表的Num_arr[i]变为Num_arr[i-1]+1。表示比前一个的糖果数多一个。
然后再从末尾到起始遍历ratings数组,假如第i-1个的ratingvalue比i的大,就将当前的Num_arr[i-1]与Num_arr[i]+1比较,若是Num_arr[i]+1较大,就将Num_arr[i-1]更新为Num_arr[i]+1。最终得到最小的糖果数能满足要求。
代码:
There are N children standing in a line. Each child is assigned arating value.
You are giving candies to these children subjected to the followingrequirements:
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?
思路:
因为每个人最少得到一个糖果,初始化Num_arr[]为1,表示每个人得到的起始糖果为1。
然后从起始到末尾遍历ratings数组,假如第i个的rating value比i-1的大,就将此rating value代表的Num_arr[i]变为Num_arr[i-1]+1。表示比前一个的糖果数多一个。
然后再从末尾到起始遍历ratings数组,假如第i-1个的ratingvalue比i的大,就将当前的Num_arr[i-1]与Num_arr[i]+1比较,若是Num_arr[i]+1较大,就将Num_arr[i-1]更新为Num_arr[i]+1。最终得到最小的糖果数能满足要求。
代码:
int candy(vector<int> &ratings) { int n=ratings.size(); vector<int> Num_arr(n,1); for(int i=1; i!=n; i++) { if(ratings[i]>ratings[i-1]) Num_arr[i] = Num_arr[i-1]+1; } for(int i=n-1; i>0; i--) { if(ratings[i-1]>ratings[i] && Num_arr[i-1] < Num_arr[i]+1) Num_arr[i-1] = Num_arr[i]+1; } int sum=0; for(int i=0; i!=n; i++) sum += Num_arr[i]; return sum; }
相关文章推荐
- [leetcode] Candy
- Leetcode 之 Candy
- leetcode — candy
- [LeetCode] Candy
- [LeetCode] Candy
- Leetcode - candy
- LeetCode: Candy
- Leetcode之Candy分糖果问题
- Leetcode:Candy
- LeetCode(135)Candy
- Leetcode: Candy
- Leetcode225: Candy
- leetcode之Candy
- [LeetCode]—Candy 分糖果问题
- Leetcode candy中c++解法
- [leetcode] Candy
- [leetcode] Candy
- leetcode->Candy
- leetcode:candy
- LeetCode135—Candy