LeetCode 135. Candy
博客转载自:http://www.cnblogs.com/grandyang/p/4575026.html
这个题一看就很难。。。但答案真是清新脱俗啊。。。
Solution1:
这道题看起来很难,其实解法并没有那么复杂,当然我也是看了别人的解法才做出来的,先来看看两遍遍历的解法,首先初始化每个人一个糖果,然后这个算法需要遍历两遍,第一遍从左向右遍历,如果右边的小盆友的等级高,等加一个糖果,这样保证了一个方向上高等级的糖果多。然后再从右向左遍历一遍,如果相邻两个左边的等级高,而左边的糖果又少的话,则左边糖果数为右边糖果数加一。最后再把所有小盆友的糖果数都加起来返回即可。代码如下:
class Solution {
public:
int candy(vector<int>& ratings) {
int res = 0, n = ratings.size();
vector<int> nums(n, 1);
for (int i = 0; i < n - 1; ++i) {
if (ratings[i + 1] > ratings[i]) nums[i + 1] = nums[i] + 1;
}
for (int i = n - 1; i > 0; --i) {
if (ratings[i - 1] > ratings[i]) nums[i - 1] = max(nums[i - 1], nums[i] + 1);
}
for (int num : nums) res += num;
return res;
}
};
吹一波:别人真厉害!
便利一次的好复杂,不看了。。。
本文介绍了解决LeetCode135糖果问题的一种高效算法。该算法通过两次遍历,确保每个孩子的糖果数符合其评分标准,同时保证了整体最小糖果数。首次遍历从左到右,若右边孩子评分更高则增加糖果;第二次遍历从右到左,确保左边孩子在评分更高的情况下获得足够糖果。
1373

被折叠的 条评论
为什么被折叠?



