# 存在连续三个奇数的数组(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

# 使用按位与(&)

判断偶数奇数的关键点在于二进制的最后一位是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