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

发布时间:2024年01月23日

LeetCode?启动!!!


状态回归,逐渐找回之前刷题的节奏了,终于是在寒假稳住一点了

题目:最长交替子数组

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

题目描述

代码与解题思路

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,这样我们就能通过这个式子来推断他是不是一个交错数组了

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

文章来源:https://blog.csdn.net/Locky136/article/details/135765008
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。