首页 > 代码库 > [LeetCode] Candy
[LeetCode] 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?
例子:
input : 1 1 7 6 5 9 7
第一次扫描: 1 1 2 1 1 2 1
第二次扫描: 1 1 3 2 1 2 1
1 class Solution { 2 public: 3 int candy(vector<int> &ratings) { 4 int res = 0; 5 int n = ratings.size(); 6 if (n == 0) { 7 return res; 8 } 9 int *t = new int[n];10 for (int i = 0; i < n; ++i) {11 t[i] = 1;12 }13 //从左向右扫描 ,保证当前比前一个多14 for (int i = 1; i < n; ++i) {15 if (ratings[i] > ratings[i-1]) {16 t[i] = t[i-1] + 1;17 }18 }19 //从右向左扫描, 保证当前比后一个多 20 for(int i = n-2;i >= 0;i--)21 { 22 //如果第i个的小孩的权值比i+1个小孩高,但是糖的数目却小或者相等,那么i的糖数目等于i+1的糖数目+1。 23 if(ratings[i] > ratings[i+1] && t[i] <= t[i+1])24 { 25 t[i] = t[i+1] + 1; 26 } 27 }28 for (int i = 0; i < n; ++i) {29 res += t[i];30 }31 return res;32 }33 };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。