1550-存在连续三个奇数的数组

Raphael Liu Lv10

给你一个整数数组 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

方法一:枚举

思路与算法

枚举所有的连续的三个元素,判断这三个元素是否都是奇数,如果是,则返回 true。如果所有的连续的三个元素中,没有一个满足条件,返回 false

代码

[sol1-C++]
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
bool threeConsecutiveOdds(vector<int>& arr) {
int n = arr.size();
for (int i = 0; i <= n - 3; ++i) {
if ((arr[i] & 1) & (arr[i + 1] & 1) & (arr[i + 2] & 1)) {
return true;
}
}
return false;
}
};
[sol1-Java]
1
2
3
4
5
6
7
8
9
10
11
class Solution {
public boolean threeConsecutiveOdds(int[] arr) {
int n = arr.length;
for (int i = 0; i <= n - 3; ++i) {
if ((arr[i] & 1) != 0 && (arr[i + 1] & 1) != 0 && (arr[i + 2] & 1) != 0) {
return true;
}
}
return false;
}
}
[sol1-JavaScript]
1
2
3
4
5
6
7
8
9
var threeConsecutiveOdds = function(arr) {
const n = arr.length;
for (let i = 0; i <= n - 3; ++i) {
if ((arr[i] & 1) & (arr[i + 1] & 1) & (arr[i + 2] & 1)) {
return true;
}
}
return false;
};
[sol1-Python3]
1
2
3
4
5
6
class Solution:
def threeConsecutiveOdds(self, arr: List[int]) -> bool:
n = len(arr)
return n >= 3 and \
any(arr[i] & 1 and arr[i + 1] & 1 and arr[i + 2] & 1 \
for i in range(n - 2))

复杂度分析

记原序列的长度为 n。

  • 时间复杂度:O(n)。
  • 空间复杂度:O(1)。
 Comments
On this page
1550-存在连续三个奇数的数组