题目
给定一个非空整数列表 temperatures ,该列表依次记录了每日温度,请计算在每一天需要等几天才会有更高的温度,并将结果通过列表返回。
说明:如果气温在这之后都不会升高,请在该位置用 0 来代替。
例如:
给定一个列表:[73, 74, 75, 71, 69, 72, 76, 73],返回结果:[1, 1, 4, 2, 1, 1, 0, 0]
给定一个列表:[30, 25, 35, 32],返回结果:[2, 1, 0, 0]
解释:
[30, 25, 35, 32] 表示该列表记录了4日温度,第 1 日为30,第 2 日为25,第 3 日为35,第 4 日为32 ;
[2, 1, 0, 0] 表示该列表每日需要等几天才会有更高的温度,第 1 日需要等 2 天后温度升高到35,第 2 日需要等 1 天后温度升高到35,第 3、4 日后温度都不会升高,所以都是 0
实现思路1
- 直接暴力破解
- 第一层遍历设置当前温度的位置 i,第二层遍历设置当前温度之后的位置 j
- 每次遍历时寻找出温度升高的下一天,然后通过下标计算得出相差的天数 j - i ,并跳出第二层循环
代码实现
def dailyTemperatures(temperatures):
res = []
for i in range(len(temperatures)):
count = 0
for j in range(i + 1, len(temperatures)):
if temperatures[j] > temperatures[i]:
count += j - i
res.append(count)
break
else: # for ... else 只有在 for 中全部遍历完,且for中没有因 break 提前跳出循环时才执行else
res.append(0)
return res
实现思路2
- 借助
栈
来实现 - 用列表 res 表示返回的结果,并设置默认值为
[0] * len(temperatures)
,用列表 stack 表示栈,其用于存储当前温度的下标 i - 第一层
for
遍历 temperatures ,每次遍历都需把当前温度的下标 i 添加到 stack - 第二层用
while
循环 stack ,如果非空并且当前温度大于栈顶元素对应的温度,那么执行出栈,直到栈顶元素对应的温度大于当前温度 - 每次 stack 执行出栈时,可以计算得出当前温度升高所需的天数
i - stack.pop()
代码实现
def dailyTemperatures(temperatures):
res = [0] * len(temperatures)
stack = []
for i, cur in enumerate(temperatures):
while stack and cur > temperatures[stack[-1]]:
index = stack.pop()
res[index] = i - index
stack.append(i)
return res
更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)
网友评论