力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第 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
示例 2:
输入:
temperatureA = [5,10,16,-6,15,11,3]
temperatureB = [16,22,23,23,25,3,-16]
输出:
3
提示:
2 <= temperatureA.length == temperatureB.length <= 1000
-20 <= temperatureA[i], temperatureB[i] <= 40
问题简要描述:返回两地气温变化趋势相同的最大连续天数
Java
class Solution {
public int temperatureTrend(int[] temperatureA, int[] temperatureB) {
int ans = 0, f = 0;
for (int i = 0; i < temperatureA.length - 1; i++) {
int x = temperatureA[i + 1] - temperatureA[i];
int y = temperatureB[i + 1] - temperatureB[i];
if ((x == 0 && y == 0) || x * y > 0) {
ans = Math.max(ans, ++f);
} else {
f = 0;
}
}
return ans;
}
}
Python3
class Solution:
def temperatureTrend(self, temperatureA: List[int], temperatureB: List[int]) -> int:
ans = f = 0
for (a1, b1), (a2, b2) in pairwise(zip(temperatureA, temperatureB)):
x, y = a2 - a1, b2 - b1
if x == y == 0 or x * y > 0:
f += 1
ans = max(ans,f)
else:
f = 0
return ans
TypeScript
function temperatureTrend(temperatureA: number[], temperatureB: number[]): number {
let [ans, f] = [0, 0];
for (let i = 0; i < temperatureA.length - 1; i++) {
let x = temperatureA[i + 1] - temperatureA[i];
let y = temperatureB[i + 1] - temperatureB[i];
if ((x == 0 && y == 0) || x * y > 0) {
ans = Math.max(ans, ++f);
} else {
f = 0;
}
}
return ans;
};
C++
class Solution {
public:
int temperatureTrend(vector<int>& temperatureA, vector<int>& temperatureB) {
int ans = 0, f = 0;
for (int i = 0; i < temperatureA.size() - 1; i++) {
int x = temperatureA[i + 1] - temperatureA[i];
int y = temperatureB[i + 1] - temperatureB[i];
if ((x == 0 && y == 0) || x * y > 0) {
ans = max(ans, ++f);
} else {
f = 0;
}
}
return ans;
}
};
Go
func temperatureTrend(temperatureA []int, temperatureB []int) int {
ans, f := 0, 0
for i, _ := range temperatureA[1:] {
x := temperatureA[i+1] - temperatureA[i]
y := temperatureB[i+1] - temperatureB[i]
if (x == 0 && y == 0) || x*y > 0 {
f++
ans = max(ans, f)
} else {
f = 0
}
}
return ans
}