# 存在连续三个奇数的数组(1550)
# 题目
给你一个整数数组 arr
,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true
;否则,返回 false
。
# 示例
输入:arr = [2,6,4,1]
输出:false
输入:arr = [1,2,34,3,4,5,7,23,12]
输出:true
提示:
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
# 算法
# 方法一
循环判断 三个数都为奇数返回true 若第二个数为偶数,第三个数为奇数,则以第三个数为下一次判断的第一个数 若第二、三个数都为偶数,则跳过这两个数,以第四个数作为下一次判断的第一个数
export const threeConsecutiveOdds = (arr) => {
for (let i = 0; i < arr.length - 2; i++) {
if (arr[i] % 2 === 1 && arr[i + 1] % 2 === 1 && arr[i + 2] % 2 === 1) {
return true;
} else if (arr[i + 1] % 2 === 0 && arr[i + 2] % 2 === 1) {
i++;
continue;
} else if (arr[i + 1] % 2 === 0 && arr[i + 2] % 2 === 0) {
i += 2;
continue;
}
}
return false;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 使用按位与(&)
判断偶数奇数的关键点在于二进制的最后一位是0还是1,0是偶数,1是奇数
按位与&
运算符要求两个数字同一位均为1则为1,否则为0
所以a & 1 === 1
即a是奇数,a & 0 === 0
即a是偶数
export const threeConsecutiveOdds = (arr) => {
for (let i = 0; i < arr.length; i++) {
if (arr[i] & 1 && arr[i + 1] & 1 && arr[i + 2] & 1) {
return true;
}
}
return false;
};
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8