[LeetCode] 每日一题 1550. 存在连续三个奇数的数组(简单题)
题目描述
给你一个整数数组 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
解题思路
今天 LeetCode 出的是一道难度不高的简单题,题意也非常直接:判断数组中是否存在连续三个奇数。
这类题目其实就是考察基本的遍历+条件判断,没什么花活可言。我在实现时选择了更底层的一种判断奇偶的方法:位运算 (num & 1)
。虽然 % 2
也能判断奇偶性,而且 Java 编译器可能会自动优化,但我认为在这种小题中显式使用位运算更清晰直接,也符合我的开发习惯。
整体思路如下:
从数组的第 3 个元素开始遍历
每次检查当前元素和前两个元素是否都为奇数
如果遇到连续三个奇数,立刻返回 true
如果整个数组遍历完都没出现,就返回 false
代码实现
class Solution {
public boolean threeConsecutiveOdds(int[] arr) {
int n = arr.length;
for (int i = 2; i < n; i++) {
if (isOdd(arr[i - 2]) && isOdd(arr[i - 1]) && isOdd(arr[i])) {
return true;
}
}
return false;
}
private boolean isOdd(int num) {
return (num & 1) == 1;
}
}
复杂度分析
时间复杂度:O(n),只需要遍历一遍数组
空间复杂度:O(1),只使用了常数级额外空间
总结
作为一道简单题,关键就是读清题目、直译成代码,这类题往往不用设计额外的数据结构。虽然只是判断连续奇数,但通过选择位运算的方式判断奇偶性,也可以体现出一些底层思维上的细节偏好
在日常刷题中,这类题不只是练手速,也能帮助我们在写代码时保持语义明确与实现高效并重的风格
希望这篇分享能为你带来启发!如果你有任何问题或建议,欢迎在评论区留言,与我共同交流探讨。
License:
CC BY 4.0