1次遍历,空间复杂度击败100%,时间复杂度击败85%

Problem: LCP 61. 气温变化趋势

  1. 思路
  2. 解题方法
  3. 复杂度
  4. Code

思路

一开始以为是【每日温度】那种题目,但是仔细读了下,实际上可以转换成另一个问题,即"比较两个数组的最长相同子序列"

假设我们用-1、0、1分别表示当天比后一天小,当天和后一天相同,当天大于后一天。

则比如示例一可以变成这样:

css 复制代码
trendA [ 1, 0, 0, -1 ]
trendB [ 1, 1, 0, -1 ]

那么对于这俩个转换后的数组,可以看到最长相同子序列就是这一部分

也就是正确答案:2

那么现在的问题就转变成了

如何统计最长相同子序列的长度

由于子序列index有严格要求。

不是子数组 ,假如是子数组,那么这题答案就是3了

因此针对子序列,我们只要用一次遍历,判断当前遍历index下的trendA[i]是否等于

trendB[i]

如果相等,则count++

如果不相等,则count重置为0,重新计数。并在此时比较一下anscount

js 复制代码
    let count = 0;
    let ans = 0;
    for (let j = 0; j < trendA.length; j++) {
        if (trendA[j] === trendB[j]) {
            count++;
        }
        else {
            ans = Math.max(ans, count)
            count = 0;
        }

    }
    ans = Math.max(ans, count)

    return ans;

解题方法

然后我们考虑一下空间复杂度的优化,我们真的需要额外声明2个趋势数组去表示temperatureA和temperatureB,并且多一次遍历吗?

实际上并不需要。

我们可以用1次遍历和O(1)实现。

复杂度

时间复杂度:

O(n)

空间复杂度:

O(1)

Code

js 复制代码
/**
 * @param {number[]} temperatureA
 * @param {number[]} temperatureB
 * @return {number}
 */
var temperatureTrend = function (temperatureA, temperatureB) {

    let count = 0;
    let ans = 0;
    for (let i = 0; i < temperatureA.length - 1; i++) {
        let flagA;
        let flagB;
        if (temperatureA[i] < temperatureA[i + 1]) {
            flagA = -1
        }
        if (temperatureA[i] === temperatureA[i + 1]) {
            flagA = 0
        }
        if (temperatureA[i] > temperatureA[i + 1]) {
            flagA = 1
        }
        if (temperatureB[i] < temperatureB[i + 1]) {
            flagB = -1
        }
        if (temperatureB[i] === temperatureB[i + 1]) {
            flagB = 0
        }
        if (temperatureB[i] > temperatureB[i + 1]) {
            flagB = 1
        }

        if (flagA === flagB) {
            count++;
        }
        else {
            ans = Math.max(ans, count)
            count = 0;
        }
    }



    ans = Math.max(ans, count)

    return ans;

};
相关推荐
L歪歪君2 小时前
Apache Doris全链路性能优化实战指南:从架构设计到生产落地
java·开发语言·算法
m0_466525292 小时前
从“算法内卷”到“可信易用” 东软多模态医学人工智能平台开启无代码科研新时代
人工智能·算法
码少女2 小时前
数据结构——冒泡排序及优化
数据结构·算法·排序算法
梦回江东2 小时前
ansible中的主机清单
算法
青梅橘子皮2 小时前
string---入门OJ题(1)
数据结构·算法
qq_454245033 小时前
BasicMethod.Map 设计框架:8 个并行基础模块的数学根基与实现
数据结构·算法·c#
青山木3 小时前
Hot 100 --- 二叉树与递归
java·数据结构·算法·leetcode·深度优先
珠海西格电力4 小时前
数据采集与治理:零碳园区管理系统的 “生命线”
大数据·人工智能·算法·架构·能源
●VON4 小时前
HarmonyKit | 鸿蒙新特性:router 导航 API 从 pushUrl 到 UIContext 的演进
算法·华为·交互·harmonyos