1550. 存在连续三个奇数的数组
1550. 存在连续三个奇数的数组
题目
Given an integer array arr
, return true
if there are three consecutive odd numbers in the array. Otherwise, return false
.
Example 1:
Input: arr = [2,6,4,1]
Output: false
Explanation: There are no three consecutive odds.
Example 2:
Input: arr = [1,2,34,3,4,5,7,23,12]
Output: true
Explanation: [5,7,23] are three consecutive odds.
Constraints:
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
题目大意
给你一个整数数组 arr
,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true
;否则,返回 false
。
示例 1:
输入: arr = [2,6,4,1]
输出: false
解释: 不存在连续三个元素都是奇数的情况。
示例 2:
输入: arr = [1,2,34,3,4,5,7,23,12]
输出: true
解释: 存在连续三个元素都是奇数的情况,即 [5,7,23] 。
提示:
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
解题思路
使用一个计数器
odd
记录连续奇数的个数,初始化为0
。遍历数组中的每个数字:
- 如果当前数字是奇数,增加计数器
odd
的值,若odd
的值达到3
时,立即返回true
。 - 如果当前数字是偶数,重置计数器
odd
为0
。
- 如果当前数字是奇数,增加计数器
遍历完成后,如果没有找到满足条件的连续奇数,则返回
false
。
复杂度分析
- 时间复杂度:
O(n)
,遍历数组一次。 - 空间复杂度:
O(1)
,使用了常数空间变量。
代码
/**
* @param {number[]} arr
* @return {boolean}
*/
var threeConsecutiveOdds = function (arr) {
let odd = 0;
for (let num of arr) {
// 判断是否为奇数
if (num % 2 === 1) {
odd++;
if (odd === 3) {
// 如果连续奇数达到3个,返回true
return true;
}
} else {
odd = 0; // 遇到偶数,重置计数器
}
}
return false; // 遍历结束后未找到
};