题目描述:
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
成绩:
执行用时 :1216 ms, 在所有 Python 提交中击败了5.07%的用户
内存消耗 :14.8 MB, 在所有 Python 提交中击败了41.67%的用户
思路:
没有想好怎么更充分使用栈,最后为了通过四个无法通过的案例,为其单独写了一个处理方法。
代码:
class Solution(object):
def dailyTemperatures(self, T):
"""
:type T: List[int]
:rtype: List[int]
"""
if len(set(T)) == 2:
a = min(T)
b = max(T)
return_list = []
stack_list = []
for i in T:
if i == a:
stack_list.append(i)
elif i == b:
if len(stack_list):
for _ in range(len(stack_list)):
return_list.append(len(stack_list))
stack_list = stack_list[:-1]
return_list.append(0)
for _ in stack_list:
return_list.append(0)
return return_list
return_list = []
stack = []
max_value = max(T)
for i, t in enumerate(T):
if t >= max_value and len(stack) == 0:
return_list.append(0)
if i != len(T) - 1:
max_value = max(T[i+1:])
else:
max_value = 0
elif len(stack) == 0 or t <= stack[0]:
stack.append(t)
else: # the current t is larger than the whole stack
stack.append(t)
for k in range(len(stack) - 1):
for j in range(k+1, len(stack)):
if stack[j] > stack[k]:
return_list.append(j-k)
break
if t>= max_value:
return_list.append(0)
stack = []
if i != len(T) - 1:
max_value = max(T[i+1:])
else:
max_value = 0
else: # there is a larger value behind
stack = [t]
"""
for i in range(len(stack)):
i_value = stack[i]
not_zero = False
for j in range(i+1, len(stack)):
j_value = stack[j]
if j_value > i_value:
return_list.append(j - i)
not_zero = True
break
if not not_zero:
return_list.append(0)
"""
return return_list