状态回归,逐渐找回之前刷题的节奏了,终于是在寒假稳住一点了
题目链接: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,这样我们就能通过这个式子来推断他是不是一个交错数组了
这一类需要模拟的题目,最重要的就是我们拿草稿纸,或者说画图板,自己用手模拟一下,思路自然而然就会清晰了