LeetCode Candy
2016-04-28 21:36
197 查看
LeetCode解题之Candy
原题
一直线上站了N个孩子,每个孩子都有一个属于自己的数字,现在按照如下规则给孩子分发糖果:每个孩子至少有一个糖果;相邻的孩子中数字比较大的那个拿的糖果也比较多。求最少要发掉多少个糖果。注意点:
无
例子:
输入: ratings = [1, 2, 3, 2]
输出: 7
解题思路
从前往后遍历的时候,我们只考虑升序的序列,对于其中一段升序的序列,最理想的情况是按照1,2,3…这样分发糖果;而对于降序的序列,如果从后往前遍历就也变成升序的了。通过前序和后序遍历后,升序与降序的交接处那个点会有两个值,因为要比两边的孩子拿到的糖果都多,所以取较大的那个值。这时候得到的数组就是在满足题目要求前提下每个孩子拿到的最少的糖果数,返回它的和即可。AC源码
class Solution(object): def candy(self, ratings): """ :type ratings: List[int] :rtype: int """ n = len(ratings) candy = [1] * n for i in range(1, n): if ratings[i] > ratings[i - 1]: candy[i] = candy[i - 1] + 1 for i in range(n - 2, -1, -1): if ratings[i] > ratings[i + 1]: candy[i] = max(candy[i], candy[i + 1] + 1) return sum(candy) if __name__ == "__main__": assert Solution().candy([1, 2, 3, 7, 4, 3, 2, 1]) == 21
欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。
相关文章推荐
- IIS应用程序池自动回收问题的解决办法
- R语言学习二 数据类型
- 集合框架(数据结构之栈和队列)
- 封装自己的LINUX光盘
- 安卓导入第三方源码库
- 基于分布式、服务化的maven项目文件规划
- SURVIVAL SHOOTER TUTORIAL之EnemyOne及其NavgitionMeshAgent [5]
- scala中call-by-name和call-by-value
- 第六七章读后感
- KNN
- Codeforces 669C Little Artem and Matrix (模拟)
- 【Android动画九章】-TranslateAnimation(位移动画)
- MySQL复制: Galera
- iOS网络中下载文件之断点续传
- 线程间操作无效:从不是创建控件的线程访问它的三种方法
- iOS之AFNetworking
- NOIP200301乒乓球
- 团队绩效评估计划
- 《时间之墟》
- Linux下SSH远程连接断开后让程序继续运行解决办法