气温变化趋势

344 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

🎈算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 -> 气温变化趋势

题目描述

力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第 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
image.png

示例 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

思路分析

题意分析

首先我们要先理解一下题目的意思,题目会给我们两个数组,分别代表两个地区最近n天的气温数值,我们需要通过这两个数组计算这两个地区气温变化趋势相同的最大连续天数。气温变化趋势,根据以下规则判断:

  • 若第 i+1 天的气温 高于 第 i 天,为 上升 趋势
  • 若第 i+1 天的气温 等于 第 i 天,为 平稳 趋势
  • 若第 i+1 天的气温 低于 第 i 天,为 下降 趋势

解题步骤

知道了题目的要求之后,我们便可以开始编写代码了:

  • 1、计算两地的气温变化趋势 根据气温变化趋势的规则,我们可以将两地的气温数组转化成气温变化趋势数组:
let arr1 = [],arr2 = [];
const cal = (a,b)=>{
    if(a == b) return 0;
    return a - b > 0 ? 1 : -1;
};
for(let i = 1; i < temperatureA.length; i++){
    arr1.push(cal(temperatureA[i],temperatureA[i - 1]));
    arr2.push(cal(temperatureB[i],temperatureB[i - 1]));
}
  • 2、比较两地的气温变化趋势

比较两地的气温变化趋势,统计连续相同的最大天数。

let res = 0,temp = 0;
for(let i = 0; i < arr1.length; i++){
    if(arr1[i] == arr2[i]) temp++;
    else temp = 0;
    res = Math.max(res,temp);
}

完整AC代码如下:

AC代码

/**
 * @param {number[]} temperatureA
 * @param {number[]} temperatureB
 * @return {number}
 */
 var temperatureTrend = function(temperatureA, temperatureB) {
     let arr1 = [],arr2 = [];
     const cal = (a,b)=>{
         if(a == b) return 0;
         return a - b > 0 ? 1 : -1;
     };
     for(let i = 1; i < temperatureA.length; i++){
        arr1.push(cal(temperatureA[i],temperatureA[i - 1]));
        arr2.push(cal(temperatureB[i],temperatureB[i - 1]));
     }
     let res = 0,temp = 0;
     for(let i = 0; i < arr1.length; i++){
         if(arr1[i] == arr2[i]) temp++;
         else temp = 0;
         res = Math.max(res,temp);
     }
     return res;
};

说在后面

🎉这里是JYeontu,喜欢算法,GDCPC打过卡;热爱羽毛球,大运会打过酱油。毕业一年,两年前端开发经验,目前担任H5前端开发,算法业余爱好者,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。