文章

[LeetCode] 每日一题 1550. 存在连续三个奇数的数组(简单题)

题目描述

给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false

题目链接

https://leetcode.cn/problems/three-consecutive-odds

示例输入

示例 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