题目描述
给定一个整数数组 arr
,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true
;否则,返回 false
。
输入:arr = [2,6,4,1]
输出:false
解释:不存在连续三个元素都是奇数的情况。
输入:arr = [1,2,34,3,4,5,7,23,12]
输出:true
解释:存在连续三个元素都是奇数的情况,即 [5,7,23]。
限制
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
算法
(遍历数组) $O(n)$
- 遍历数组,定义计数器
odd
,初始为 0。 - 如果遇到奇数,则
odd
自加 1,否则重置为 0。 - 遍历过程中如果发现
odd
等于 3,则返回true
。遍历结束,则返回false
。
时间复杂度
- 遍历一次数组,故时间复杂度为 $O(n)$。
空间复杂度
- 仅需要常数的额外空间。
Go 代码
func threeConsecutiveOdds(arr []int) bool {
var odd int
for _, v := range arr {
if v%2 == 1 {
odd++
} else {
odd = 0
}
if odd == 3 {
return true
}
}
return false
}