[LeetCode]题解(python):135-Candy
题目来源:
https://leetcode.com/problems/candy/
题意分析:
有N个孩子站成一条线。每个孩子有个排名。要求1.每个孩子至少一个糖果,2.相邻的孩子,那么较高排名的孩子得到更多的糖果。返回需要的最少糖果数量。题目中我们可以看到一个隐含的信息。如果相邻孩子排名相同,那么他们的糖果数目可以不一样。
题目思路:
这道题目首先要确定整个序列的低洼点,也就是rating[i - 1] >= rating[i] < raing[i+1]。将低洼点的取值取为1,然后往凸点赋值。要注意的是相邻相同的情况,还有凸点的取值。
代码(python):
class Solution(object):
def candy(self, ratings):
"""
:type ratings: List[int]
:rtype: int
"""
size = len(ratings)
if size == 0: return 0
ans = [0 for i in range(size)]
mark,small,d = True,[],{}
i = 0
while i < size:
if mark:
while i < size - 1:
if ratings[i] == ratings[i + 1]:
if i == size - 2:
return size
ans[i] = 1
else:
mark = False
break
i += 1
if i == size - 1:
small.append(i)
ans[i] = 1
break
if ratings[i] < ratings[i + 1]:
small.append(i)
ans[i] = 1;i += 1
while i < size:
if ratings[i] > ratings[i - 1]:
ans[i] = ans[i - 1] + 1
elif ratings[i] == ratings[i - 1]:
ans[i] = 1
else:
d[i - 1] = True
break
i += 1
elif ratings[i] == ratings[i + 1]:
ans[i + 1] = 1
i += 1
else:
i += 1
#print(ans)
#print(small)
for i in small:
#print(small)
j = i - 1
while j >= 0:
if ans[j] == 0 or j not in d:
if ratings[j] > ratings[j + 1]:
ans[j] = ans[j + 1] + 1
else:
ans[j] = 1
elif j > 0 and ans[j] == ans[j - 1]:
ans[j] = ans[j + 1] + 1
break
else:
if ratings[j] == ratings[j + 1]:
break
ans[j] = max(ans[j],ans[j+1]+1)
break
j -= 1
sum = 0
#print(ans,d)
for i in ans:
sum += i
#print(i)
return sum
[LeetCode]题解(python):135-Candy的更多相关文章
- LeetCode 135 Candy(贪心算法)
135. Candy There are N children standing in a line. Each child is assigned a rating value. You are g ...
- 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...
- 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)
目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...
- 【LeetCode题解】232_用栈实现队列(Implement-Queue-using-Stacks)
目录 描述 解法一:在一个栈中维持所有元素的出队顺序 思路 入队(push) 出队(pop) 查看队首(peek) 是否为空(empty) Java 实现 Python 实现 解法二:一个栈入,一个栈 ...
- 【LeetCode题解】844_比较含退格的字符串(Backspace-String-Compare)
目录 描述 解法一:字符串比较 思路 Java 实现 Python 实现 复杂度分析 解法二:双指针(推荐) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以 ...
- 【LeetCode题解】25_k个一组翻转链表(Reverse-Nodes-in-k-Group)
目录 描述 解法一:迭代 思路 Java 实现 Python 实现 复杂度分析 解法二:递归(不满足空间复杂度) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记 ...
- 【LeetCode题解】24_两两交换链表中的节点(Swap-Nodes-in-Pairs)
目录 描述 解法一:迭代 思路 Java 实现 Python 实现 复杂度分析 解法二:递归(不满足空间复杂度要求) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解 ...
- 【LeetCode题解】347_前K个高频元素(Top-K-Frequent-Elements)
目录 描述 解法一:排序算法(不满足时间复杂度要求) Java 实现 Python 实现 复杂度分析 解法二:最小堆 思路 Java 实现 Python 实现 复杂度分析 解法三:桶排序(bucket ...
- 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)
目录 描述 解法:双指针 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以访问我的 github. 描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回 ...
- [LeetCode 题解] Search in Rotated Sorted Array
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 题目描述 Suppose an array ...
随机推荐
- Codechef Nuclear Reactors 题解
There are K nuclear reactor chambers labelled from 0 to K-1. Particles are bombarded onto chamber 0. ...
- Qt程序设计——txt文本中获取字符串的问题
QT对txt文本进行读写一般是采用QFile和QTextStream结合使用,在此不细说,主要说一下读取txt文本的注意事项.因为txt文本中有中文也有英文还有数字,要准确获得需要的字串可就要多一个心 ...
- 使用 Eclipse Memory Analyzer 进行堆转储文件分析
Eclipse Memory Analyzer(MAT)是著名的跨平台集成开发环境 Eclipse Galileo 版本的 33 个组成项目中之一,它是一个功能丰富的 JAVA 堆转储文件分析工具,可 ...
- socket中的option
/// Set an option on the socket. /** * This function is used to set an option on the socket. * * @pa ...
- Excel VLOOKUP等使用记录
1.LEFT 函数:LEFT(G2,ROW(INDIRECT("76:"&LEN(G2)))) 截取G2单元格从开头,SIZE=76的部分字符串 2.RIGHT 函数:RI ...
- springmvc中关于静态资源的放行
参考:http://blog.csdn.net/fujiakai/article/details/52504525 方法1. 修改web.xml文件,增加对静态资源的url映射,要加在org.spri ...
- 【LeetCode题意分析&解答】36. Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- 随机数、continue、break
arc4random() — 返回一个随机数(无符号整型). 如果要随机一个 [a, b]范围内的整数 公式:arc4random() % (b - a + 1) + a; #include &l ...
- Python 中psutil 模块的安装
第一步下载psutil 的安装包 网址:https://pypi.python.org 第二步解压 .tar.gz cd psutil- 第三步安装: python setup.py build py ...
- U盘中的闪存白片与黑片
简单的说,黑片的概念主要用于芯片,白片的概念既用于芯片也用于闪存卡.黑片就是指芯片工厂选出的淘汰的次品,没有打上工厂标和芯片型号的芯片,这样的芯片都经过个种渠道流通到市场上来,现在很多U盘大厂大量的采 ...