我在下面有代码,基本上是每天的温度列表,例如 T = [30,50,99,44,55,33,99] 并返回一个相同长度的列表,每个输入指示必须等待多少天才能出现温暖的一天。因此,对于此示例,输出将为 [1,1,0,1,2,1,0]。如果前面没有更温暖的一天,我们只需插入 0。
约束:温度长度将在 [1, 30000] 范围内。每个温度将是 [30, 100] 范围内的整数
def dailyTemperatures(self, T):
nxt = [float('inf')] * 102
ans = [0] * len(T)
for i in xrange(len(T) - 1, -1, -1):
#Use 102 so min(nxt[t]) has a default value
warmer_index = min(nxt[t] for t in xrange(T[i]+1, 102))
if warmer_index < float('inf'):
ans[i] = warmer_index - i
nxt[T[i]] = i
return ans
我的问题是针对行"warmer_index = min(nxt[t] for t in xrange(T[i]+1, 102))";我理解到我们取最小值 102 的地步,什么?我没有得到min()的第一部分。有人可以解释一下吗?
对于它后面的"if 语句",这并不总是正确的,因为 float('inf') 取最大可能的值?这里的任何解释也很好,谢谢。
这不是 102 的最小值。
xrange(T[i]+1, 102)
是从T[i]+1
到101
的整数序列。这些用作nxt[t]
中t
的值。 然后min()
返回nxt
的所有元素的最小值。
nxt[t] for t in xrange(T[i]+1, 102)
是一个生成器表达式,它返回该值序列,并将该序列传递给min()
以计算最小值。
关于if
语句,如果找不到温暖的日子,那将是不正确的,因为所有nxt
值都将inf
。发生这种情况时,我们跳过分配给ans[i]
,保留最初给出的0
值。