力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第 i ~ (i+1)
天的气温变化趋势,将根据以下规则判断:
- 若第
i+1
天的气温 高于 第i
天,为 上升 趋势 - 若第
i+1
天的气温 等于 第i
天,为 平稳 趋势 - 若第
i+1
天的气温 低于 第i
天,为 下降 趋势
已知 temperatureA[i]
和 temperatureB[i]
分别表示第 i
天两地区的气温。 组委会希望找到一段天数尽可能多,且两地气温变化趋势相同的时间举办嘉年华活动。请分析并返回两地气温变化趋势相同的最大连续天数。
即最大的
n
,使得第i~i+n
天之间,两地气温变化趋势相同
示例 1:
输入:
temperatureA = [21,18,18,18,31]
temperatureB = [34,32,16,16,17]
输出:
2
解释:如下表所示, 第
2~4
天两地气温变化趋势相同,且持续时间最长,因此返回4-2=2
思路:题目关键在于如何连续记录相同的变化趋势
代码1:简单遍历:
class Solution:
def temperatureTrend(self, temperatureA: List[int], temperatureB: List[int]) -> int:
n = len(temperatureA)
cnt = 0
res = 0
for i in range(1, n):
t1, t2 = 0, 0
if temperatureA[i] > temperatureA[i - 1]:
t1 = 1
elif temperatureA[i] < temperatureA[i - 1]:
t1 = -1
if temperatureB[i] > temperatureB[i - 1]:
t2 = 1
elif temperatureB[i] < temperatureB[i - 1]:
t2 = -1
if t1 == t2:
cnt += 1
else:
cnt = 0
res = max(res, cnt)
return res
思路2:灵神思路
把变化趋势通过数学表达式改成用数字表示状态
(x > y) - (x < y)
x<y (x > y) - (x < y)=0-1=-1
x=y (x > y) - (x < y)=0-0=0
x>y (x > y) - (x < y)=1-0=1
代码:
class Solution:
def temperatureTrend(self, temperatureA: List[int], temperatureB: List[int]) -> int:
ans = same = 0
for (a1, b1), (a2, b2) in pairwise(zip(temperatureA, temperatureB)):
if (a1 > a2) - (a1 < a2) == (b1 > b2) - (b1 < b2):
same += 1
ans = max(ans, same)
else:
same = 0
return ans
for (a1, b1), (a2, b2) in pairwise(zip(temperatureA, temperatureB)):
可以从A,B列表中每次都选出两个数进行组合