题解 | #分糖果问题#
分糖果问题
https://www.nowcoder.com/practice/76039109dd0b47e994c08d8319faa352
class Solution:
def candy(self , arr: List[int]) -> int:
# write code here
candy = [1 for _ in range(len(arr))]
for i in range(1, len(arr)):
if arr[i-1] < arr[i]:
candy[i] = candy[i-1]+1
res = candy[-1]
i = len(arr) - 2
while i >= 0:
if arr[i] > arr[i+1] and candy[i] <= candy[i+1]:
candy[i] = candy[i+1] + 1
res += candy[i]
i -= 1
return res
解题思路
- 先从左往右遍历,如果当前得分比前一个得分高,则当前糖果数等于前一个糖果数加一;
- 再从右往左遍历,如果当前的得分高于后一个得分,且糖果数小于等于后一个的,则当前糖果数等于后一个的糖果数加一;
- 不断地累加糖果数量,得到最终的糖果数。
复杂度
- 时间复杂度为O(N);
- 空间复杂度为O(N)。