题目地址
难度:⭐
题目描述:
给你一个整数数组 arr
,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true
;否则,返回 false
。
示例1:
1 2 3
| 输入:arr = [2,6,4,1] 输出:false 解释:不存在连续三个元素都是奇数的情况。
|
示例2:
1 2 3
| 输入:arr = [1,2,34,3,4,5,7,23,12] 输出:true 解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。
|
提示:
1 <= arr.length <= 1000
1 <= arr[i] <= 1000
🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️解题过程🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️🙋♂️
解题过程:
思路:
遍历数组,n计数为连续奇数的个数,遇到偶数置零重新奇数,若等于3则返回true。c++代码:(执行用时8ms,击败70.67%,内存消耗8.6M,击败8.15%)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public: bool threeConsecutiveOdds(vector<int>& arr) { int n=0; for(int i:arr){ if(i%2==1){ ++n; }else{ n=0; } if(n==3){ return true; } } return false; } };
|
💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎官 方 题 解💎💎💎💎💎💎💎💎💎💎💎💎💎💎💎
方法一:枚举
思路与算法
枚举所有的连续的三个元素,判断这三个元素是否都是奇数,如果是,则返回 true。如果所有的连续的三个元素中,没有一个满足条件,返回 false。
c++代码:(执行用时12ms,击败16.00%,内存消耗8.4M,击败51.04%)
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; } };
|
复杂度分析
记原序列的长度为 $n$。
- 时间复杂度:$O(n)$。
- 空间复杂度:$O(1)$。
⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳总 结⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳⏳
总结:
官方题解的解法是我一开始想到的思路,后来感觉自己写的效率可能会更好一些就改成这种方法做了。