【leetcode】Candy(python)
题目要求的比它的邻居比自己奖励,因此,我们有最少一个多的。所有我们可以找到所有的坑,凹坑例如,存在以下三种情况。
找到全部的凹点后,我们就能够从凹点处開始向左右两个方向依次查找递增序列。当中每一个高的都要比相邻的矮的多一个。比方1,2,5,4.我们找到凹点为1 和4,那么从1開始向左没有其它点,我们向右,依次得到2 比1高,2的糖果应该是1的基础上加1。为2, 5比2高,5的糖果是在2的基础上加1,为3。
令一个凹点4, 向左,5比4高,5的糖果应该是在4的基础上加 1,为2,这时我们发现冲突了,从凹点1 開始,我们得到的5的糖果是3。可是从凹点 4 開始,我们得到的糖果数却为2 ,此时我们选择哪个呢?当然,假设要少的,当然是2,可是它却违反了题目中的限定条件。5假设为2
,就不比2的糖果数多了,所以这时我们就应该选择最大的,这说明了什么呢?说明从左面開始向右到 5 得到的递增序列的长度大于从4開始向左到5得到的递增序列。
也就是说,得到的糖果数的多少,取决于所构成的连续递增序列的长度。
class Solution:
def candy(self, A):
if len(A) == 0: return 0
candies = [1] * len(A)
#insert two guard at both bounder
#为了便于处理凹点,我们在左右边界各插入一个点作为哨兵,这样在比較的时候
#就不用额外处理边界点了。 A.insert(0, A[0])
A.append(A[-1])
#pits 用来存储全部的凹点下标
pits = []
for i in range(1, len(A) - 1):
if A[i] <= A[i - 1] and A[i] < A[i + 1] or \
A[i] <= A[i + 1] and A[i] < A[i - 1]:
pits.append(i)
#从左到右一次处理各个凹点
for i in pits:
# go left
j = i
while A[j - 1] > A[j]:
#由于A数组增加了哨兵的缘故,所以A和candies的下标不是严格对齐的,差了一个
if candies[j - 2] < candies[j - 1] + 1:
candies[j - 2] = candies[j - 1] + 1
j -= 1
else: break
# go right
j = i
while A[j + 1] > A[j]:
if candies[j] < candies[j - 1] + 1:
candies[j] = candies[j - 1] + 1
j += 1
else: break
return sum(candies)
这里我们须要一个额外的pits数组来存储全部的凹点,事实上通过刚才我们的分析,第二种实现方式已经出现了,就是从左開始,找递增序列,然后添加糖果。对于每一个数,它和左边构成的递增序列与从右面构成的递增序列可能不一样,如上例中的5,跟左边够成的递增序列为 1,2 5,长度为3,跟右面的构成的递增序列为4,5,长度为2,而5最少的糖果数是取决于最长的递增序列的。所以我们就能够从左到右遍历一遍。然后再从右向左遍历一遍。取两次遍历的最大值。
class Solution:
def candy(self, A):
if len(A) == 0: return 0
candies = [1] * len(A)
#从左向右,按着递增来分配糖果
for i in range(1, len(A)):
if A[i] > A[i - 1]:
candies[i] = candies[i - 1] + 1 #从右向左,按着递增来分配糖果。并取最大值
for i in xrange(len(A) - 2, -1, -1):
if A[i] > A[i + 1] and candies[i] < candies[i + 1] + 1:
candies[i] = candies[i + 1] + 1 return sum(candies)
版权声明:本文博客原创文章,博客,未经同意,不得转载。
【leetcode】Candy(python)的更多相关文章
- 【leetcode】Candy(hard) 自己做出来了 但别人的更好
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- 【leetcode】4Sum(middle)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- NoSQL之【MongoDB】学习(三):配置文件说明
摘要: 继上一篇NoSQL之[MongoDB]学习(一):安装说明 之后,知道了如何安装和启动MongoDB,现在对启动时指定的配置文件(mongodb.conf)进行说明,详情请见官方. 启动Mon ...
- 【操作系统】进程间通信(C#)
原文:[操作系统]进程间通信(C#) 08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xia ...
- 【Luogu3444】ORK-Ploughing(贪心)
[Luogu3444]ORK-Ploughing(贪心) 题面 Luogu 题解 我们知道,如果我们选定了以横向为主,或者纵向为主, 那么就有尽可能减少另一个方向上耕地的次数 所以分开贪心,但是本质相 ...
- 【BZOJ1997】Planar(2-sat)
[BZOJ1997]Planar(2-sat) 题面 BZOJ 题解 很久没做过\(2-sat\)了 今天一见,很果断的就来切 这题不难呀 但是有个玄学问题: 平面图的性质:边数\(m\)的最大值为\ ...
- 【Luogu1337】平衡点(模拟退火)
[Luogu1337]平衡点(模拟退火) 题面 洛谷 题解 和BZOJ3680吊打XXX是一样的.. 但是数据很强呀.. 疯狂调参 各种WA... 很无奈呀.... #include<iostr ...
- 【BZOJ1996】合唱队(动态规划)
[BZOJ1996]合唱队(动态规划) 题面 BZOJ 题解 很容易的一道题 因为每个人不是放在了左边就是放在了右边 所以每次放好的人必定是原序列的一个子串 所以,很容易想到区间\(dp\) 设\(f ...
- 【BZOJ1899】午餐(动态规划)
[BZOJ1899]午餐(动态规划) 题面 BZOJ 题解 我太弱了 这种\(dp\)完全做不动.. 首先,感性理解一些 如果所有人都要早点走, 那么,吃饭时间长的就先吃 吃饭时间短的就晚点吃 所以, ...
随机推荐
- Irvine的专业汇编网站
http://asmirvine.com/ http://download.csdn.net/download/stupid_boy2007/3890853 http://download.csdn. ...
- js / ajax 成功提交后怎么跳转到另外一个页面?
把success那段改成 success : function (r) { if ( r.status == 'error' ){ alert(msg[r.msgno]); } else if (r. ...
- 《Linux命令行与shell脚本编程大全》 第十八章 学习笔记
第十八章:初识sed和gawk 文本处理 sed编辑器 sed编辑器可以基于输入到命令行的或是存储在命令文本文件中的命令来处理数据流中的数据. 它每次读取一行,用提供的编辑器命令匹配数据.按命令中指定 ...
- SqlHelper初探之二
在上一篇简单的介绍了sqlhelper的基本知识,接下来就让我们进一步学习他的实践过程. 首先:我们要明白的一件事Sqlhelper不是写出来的,而是在D层的代码中提炼出来的?那么就会反问一句“D层中 ...
- 移动App-UI配制篇
杂志app-UI配制篇 背景 现在公司有需求是关于杂志app,里面每个页面可能有不同的展现方式,不同的内容,不同的操作方式.那么这里就有一个需求就是根据用户定制这些不同的展现方式,不同的内容,不同的操 ...
- [C#基础] 数据类型
预定义类型 C#提供了16种预定义类型,其中包括13种简单类型和3种非简单类型. 预定义的简单类型包括以下3种: 11种数值类型 不同长度有符号和无符号的整数类型(8种) 浮点数类型float和dou ...
- 请慎用java的File#renameTo(File)方法(转)
以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名.移动文件的目的.不过后来经常发现问题:File#renameTo(File)方法会返回 ...
- (一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是 ...
- HNCU1099:堆积木
http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1099 题目描述 小明的侄子要过生日了,小 ...
- NET MVC RazorEngine 解析模板生成静态页
ASP.NET MVC 解析模板生成静态页一(RazorEngine) 简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是 ...