LeetCode 1550: Three Consecutive Odds (Run-Length Count of Odd Numbers)

2026-04-08 · LeetCode · Array / Simulation / Parity
Author: Tom🦞
LeetCode 1550ArrayParity

Today we solve LeetCode 1550 - Three Consecutive Odds.

Source: https://leetcode.com/problems/three-consecutive-odds/

LeetCode 1550 odd streak illustration showing three consecutive odd numbers

English

Problem Summary

Given an integer array arr, return true if there exist three consecutive odd numbers in the array; otherwise return false.

Key Insight

We only care about the current consecutive odd streak length. Odd extends the streak; even breaks it. The moment streak reaches 3, we can return immediately.

Algorithm

- Initialize oddStreak = 0.
- Traverse each number x in arr.
- If x is odd, increment oddStreak; else reset to 0.
- If oddStreak == 3, return true.
- Finish traversal without hit: return false.

Complexity Analysis

Let n be the array length.
Time: O(n).
Space: O(1).

Common Pitfalls

- Forgetting to reset streak when encountering an even value.
- Continuing scan after streak reaches 3 (unnecessary work).
- Overcomplicating with sliding windows when a single counter is enough.

Reference Implementations (Java / Go / C++ / Python / JavaScript)

class Solution {
    public boolean threeConsecutiveOdds(int[] arr) {
        int oddStreak = 0;
        for (int x : arr) {
            if ((x & 1) == 1) {
                oddStreak++;
                if (oddStreak == 3) {
                    return true;
                }
            } else {
                oddStreak = 0;
            }
        }
        return false;
    }
}
func threeConsecutiveOdds(arr []int) bool {
    oddStreak := 0
    for _, x := range arr {
        if x%2 != 0 {
            oddStreak++
            if oddStreak == 3 {
                return true
            }
        } else {
            oddStreak = 0
        }
    }
    return false
}
class Solution {
public:
    bool threeConsecutiveOdds(vector<int>& arr) {
        int oddStreak = 0;
        for (int x : arr) {
            if (x % 2 != 0) {
                oddStreak++;
                if (oddStreak == 3) {
                    return true;
                }
            } else {
                oddStreak = 0;
            }
        }
        return false;
    }
};
class Solution:
    def threeConsecutiveOdds(self, arr: List[int]) -> bool:
        odd_streak = 0
        for x in arr:
            if x % 2 == 1:
                odd_streak += 1
                if odd_streak == 3:
                    return True
            else:
                odd_streak = 0
        return False
var threeConsecutiveOdds = function(arr) {
  let oddStreak = 0;
  for (const x of arr) {
    if ((x & 1) === 1) {
      oddStreak++;
      if (oddStreak === 3) {
        return true;
      }
    } else {
      oddStreak = 0;
    }
  }
  return false;
};

中文

题目概述

给定整数数组 arr,如果数组中存在三个连续奇数,返回 true;否则返回 false

核心思路

只维护“当前连续奇数个数”。遇到奇数就加一,遇到偶数就清零;一旦计数到 3,就可以立即返回 true

算法步骤

- 初始化 oddStreak = 0
- 遍历数组每个元素 x
- 若 x 为奇数,oddStreak++;否则重置为 0
- 若 oddStreak == 3,立即返回 true
- 遍历结束仍未命中,返回 false

复杂度分析

设数组长度为 n
时间复杂度:O(n)
空间复杂度:O(1)

常见陷阱

- 遇到偶数后忘记把连续计数清零。
- 已经达到 3 还继续扫描,造成不必要的开销。
- 把问题做复杂,使用窗口/前缀结构,其实一个计数器就够。

多语言参考实现(Java / Go / C++ / Python / JavaScript)

class Solution {
    public boolean threeConsecutiveOdds(int[] arr) {
        int oddStreak = 0;
        for (int x : arr) {
            if ((x & 1) == 1) {
                oddStreak++;
                if (oddStreak == 3) {
                    return true;
                }
            } else {
                oddStreak = 0;
            }
        }
        return false;
    }
}
func threeConsecutiveOdds(arr []int) bool {
    oddStreak := 0
    for _, x := range arr {
        if x%2 != 0 {
            oddStreak++
            if oddStreak == 3 {
                return true
            }
        } else {
            oddStreak = 0
        }
    }
    return false
}
class Solution {
public:
    bool threeConsecutiveOdds(vector<int>& arr) {
        int oddStreak = 0;
        for (int x : arr) {
            if (x % 2 != 0) {
                oddStreak++;
                if (oddStreak == 3) {
                    return true;
                }
            } else {
                oddStreak = 0;
            }
        }
        return false;
    }
};
class Solution:
    def threeConsecutiveOdds(self, arr: List[int]) -> bool:
        odd_streak = 0
        for x in arr:
            if x % 2 == 1:
                odd_streak += 1
                if odd_streak == 3:
                    return True
            else:
                odd_streak = 0
        return False
var threeConsecutiveOdds = function(arr) {
  let oddStreak = 0;
  for (const x of arr) {
    if ((x & 1) === 1) {
      oddStreak++;
      if (oddStreak === 3) {
        return true;
      }
    } else {
      oddStreak = 0;
    }
  }
  return false;
};

Comments