class Solution:
'''
思路就是从左到右再从右到左遍历,做到相邻的两个同学分数大的同学分到更多的糖果,
但是相邻分数相同的同学分到的糖果数量未必是公平的。
'''
def candy_num(self, ratings):
length = len(ratings)
left_right = [1 for i in range(length)]
right_left = [1 for i in range(length)] # 先把每个人分的糖果的数量都设置为1
# 从左到右遍历列表:
for items in range(length):
if items > 0 and ratings[items] > ratings[items-1]:
left_right[items] = left_right[items-1]+1
pass
pass
pass
for items in range(length-1, -1, -1):
if items < length-1 and ratings[items] > ratings[items+1]:
right_left[items] = right_left[items+1]+1
pass
pass
for i in range(length):
if left_right[i] < right_left[i]:
left_right[i] = right_left[i]
pass
pass
return left_right
pass
W= Solution()
print(W.candy_num([1,2,3,4,4,2]))
输出结果:
[1, 2, 3, 4, 2, 1],也就是三位同学比分分别是[1,2,3,4,4,2]的情况下分的糖果的数量为[1, 2, 3, 4, 2, 1],这是买最少糖果的全局最优。
分糖果算法
于 2022-02-14 17:27:43 首次发布