LeetCode?启动!!!

【LeetCode】每日一题 2024_1_23 最长交替子数组(模拟)-LMLPHP
状态回归,逐渐找回之前刷题的节奏了,终于是在寒假稳住一点了

题目:最长交替子数组

题目链接:2765. 最长交替子数组

题目描述

【LeetCode】每日一题 2024_1_23 最长交替子数组(模拟)-LMLPHP

代码与解题思路

func alternatingSubarray(nums []int) int {
    ans := -1
    i, n := 0, len(nums)
    for i < n-1 {
        if nums[i+1] - nums[i] != 1 { // 不是交替数组就直接跳过
            i++
            continue
        }
        first := i // first 是当前交替数组的起始位置
        for i < n && nums[i] == nums[first] + (i-first)%2 {
            i++
        }
        ans = max(ans, i-first)
        i-- // 从前一格开始重新找新的交替数组
    }
    return ans
}

这段代码的核心是:nums[ i ] == nums[ first ] + ( i - first ) % 2

举个例子:[ 3,4,3,4,5 ]

当 first = 0,i = 1 时,( i - first ) = 1,%2 之后等于 1
当 first = 0,i = 2 时,( i - first ) = 2,%2 之后等于 0

也就是他们相差奇数个的时候会等于 1,相差偶数个的时候会等于 0,这样我们就能通过这个式子来推断他是不是一个交错数组了

这一类需要模拟的题目,最重要的就是我们拿草稿纸,或者说画图板,自己用手模拟一下,思路自然而然就会清晰了

01-24 23:09