1523. Count Odd Numbers in an Interval Range
Description
Given two non-negative integers low and high. Return the count of odd numbers between low and high (inclusive).
Example 1:
Input: low = 3, high = 7 Output: 3 Explanation: The odd numbers between 3 and 7 are [3,5,7].
Example 2:
Input: low = 8, high = 10 Output: 1 Explanation: The odd numbers between 8 and 10 are [9].
Constraints:
0 <= low <= high <= 10^9
Solutions
Solution 1: Prefix Sum Concept
Thinking
Count the odds in the closed interval \([low,high]\). The span can reach \(10^9\), so we cannot test each integer.
The range \([0,x]\) contains \(\lfloor(x+1)/2\rfloor\) odds. Subtracting the count for \([0,low-1]\) from that for \([0,high]\) gives \(\lfloor(high+1)/2\rfloor-\lfloor low/2\rfloor\), which a shift computes in constant time.
We know that the count of odd numbers in the range \([0, x]\) is \(\lfloor\frac{x+1}{2}\rfloor\). Therefore, the count of odd numbers in the range \([low, high]\) is \(\lfloor\frac{high+1}{2}\rfloor - \lfloor\frac{low}{2}\rfloor\).
The time complexity is \(O(1)\), and the space complexity is \(O(1)\).
1 2 3 | |
1 2 3 4 5 | |
1 2 3 4 5 6 | |
1 2 3 | |
1 2 3 | |
1 2 3 4 5 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 | |