标签:style blog class c code color
Problem: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:
What is the minimum candies you must give?
思路:遍历两次,首先从左往右,只看左边的邻居,满足条件:如果ratings[i] > ratings[i-1],则candy_num_1[i] > candy_num_1[i-1]。然后从右往左,只看右边的邻居,满足条件:如果ratings[i] > ratings[i+1],则candy_num_2[i] > candy_num_2[i+1]。然后取两个数组中每个孩子分得的糖果数的较大值,则每个孩子所拥有的糖果数,既对其左邻居满足条件,又对其右邻居满足条件,且能保证分得的糖果总数最少。class Solution { public: int candy(vector<int> &ratings) { int n = ratings.size(); if(n == 0 || n == 1) return n; int sum = 0;//保存最少糖果的总数 int candy_num[n]; int cur_candy = 1; int i = 0; while(i < n)//初始化数组,每人至少分配一颗 { candy_num[i] = 1; i++; } for(i = 1; i < n; i++)//从左往右遍历 { if(ratings[i] > ratings[i-1]) candy_num[i] = candy_num[i-1] + 1; } sum = candy_num[n-1]; for(i = n-2; i > -1; i--)//从右往左遍历 { if(ratings[i] > ratings[i+1]) { cur_candy++; sum += max(cur_candy, candy_num[i]); } else { cur_candy = 1; sum += candy_num[i]; } } return sum; } int max(int a, int b) { return a>b?a:b; } };
标签:style blog class c code color
原文地址:http://blog.csdn.net/wan_hust/article/details/26226277