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;

};
相关推荐
青 春 记 忆1 天前
LeetCode 142. 环形链表 II|Python 解法详解
python·leetcode·链表
不会代码的小猴1 天前
7. JSON
开发语言·c++·笔记·qt·算法·json
怪奇云呼军1 天前
知识库也会注入指令?闪电智能VoiceAgent 如何防住 Prompt Injection
人工智能·python·算法·云计算·音视频
阿里云大数据AI技术1 天前
基于 EMR Serverless Ray 实现 Qwen 模型批量推理实践
人工智能·算法·agent
Rambo.xia1 天前
为什么去马赛克算法,决定了ISP的画质上限
算法·接口隔离原则
Benny_Tang1 天前
题解:P10230 [COCI 2023/2024 #4] Lepeze
c++·算法
Geek-Chow1 天前
06 训练管线:数据如何变成权重
人工智能·算法
我变成萤火虫1 天前
反悔贪心(经典题目讲解)
c++·算法·贪心算法·stl·排序算法·反悔贪心
nike0good1 天前
April Fools Day Contest 2026 题解
算法·题解·愚人节比赛