[LeetCode] 135. Candy
2016-09-06 16:51
387 查看
思路:
大名鼎鼎的Candy two pass题. 遍历两遍, 第一遍看每个小盆友的优先级是否高于他前面的那个同学, 如果高, 给当前同学的糖就是前面那个同学的糖数加1, 其他情况先不考虑. 第二遍从右往左遍历, 此时看当前同学的前面那个人的优先级是否高于他, 如果高, 那前面那个人的糖果数, 就是max(前面人的糖果数, 当前小朋友的糖果数 + 1). 最后求总和即可.
附上大神O(n)时间, O(1)空间的高效算法, 先码, 下一遍再总结http://www.allenlipeng47.com/blog/index.php/2016/07/21/candy/
大名鼎鼎的Candy two pass题. 遍历两遍, 第一遍看每个小盆友的优先级是否高于他前面的那个同学, 如果高, 给当前同学的糖就是前面那个同学的糖数加1, 其他情况先不考虑. 第二遍从右往左遍历, 此时看当前同学的前面那个人的优先级是否高于他, 如果高, 那前面那个人的糖果数, 就是max(前面人的糖果数, 当前小朋友的糖果数 + 1). 最后求总和即可.
附上大神O(n)时间, O(1)空间的高效算法, 先码, 下一遍再总结http://www.allenlipeng47.com/blog/index.php/2016/07/21/candy/
int candy(vector<int>& ratings) { int n = ratings.size(); if (n < 2) return n; vector<int> candies(n, 1); for (int i = 1; i < n; i++) { if (ratings[i] > ratings[i - 1]) candies[i] = candies[i - 1] + 1; } for (int i = n - 1; i > 0; i--) { if (ratings[i - 1] > ratings[i]) candies[i - 1] = max(candies[i - 1], candies[i] + 1); } int res = 0; for (int i = 0; i < n; i++) res += candies[i]; return res; }
相关文章推荐
- LeetCode 135. Candy
- 【LeetCode】135. Candy
- LeetCode 135. Candy (O(n)时间 O(n)和O(1)空间的两种实现)
- [LeetCode]135. Candy
- LeetCode题解–135. Candy
- [LeetCode] 135. Candy
- leetcode - 135. Candy
- leetcode 135. Candy
- LeetCode 135. Candy
- **Leetcode 135. Candy | 思维题
- LeetCode 135. Candy
- leetcode No135. Candy
- leetcode 135. Candy
- leetcode 135. Candy 分糖果 + 很经典的贪心算法
- Leetcode 135. Candy
- [Leetcode] 135. Candy
- LeetCode 135. Candy(糖果)
- [LeetCode] 135. Candy java
- LeetCode 135. Candy
- 135. Candy Leetcode Python