1523. 在区间范围内统计奇数数目
1523. 在区间范围内统计奇数数目
题目
Given two non-negative integers low
and high
. Return the count of odd numbers betweenlow
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
题目大意
给你两个非负整数 low
和 high
。请你返回 low
和 high
之间(包括二者)奇数的数目。
示例 1:
输入: low = 3, high = 7
输出: 3
解释: 3 到 7 之间奇数数字为 [3,5,7] 。
示例 2:
输入: low = 8, high = 10
输出: 1
解释: 8 到 10 之间奇数数字为 [9] 。
提示:
0 <= low <= high <= 10^9
解题思路
奇数的范围调整:
- 为了方便计算奇数的个数,我们可以将
low
和high
都调整为偶数。 - 若原始的
low
和high
已经是偶数,不作调整。 - 若
low
是奇数,将low
调整为前一个偶数(减 1) - 若
high
是奇数,将high
调整为后一个偶数(加 1)。
- 为了方便计算奇数的个数,我们可以将
奇数个数的计算:
- 调整后奇数的个数可以通过公式计算:
奇数个数 = (high - low) / 2
- 调整的目的是确保所有奇数都在
[low, high]
这个范围内,不会遗漏或多算。
- 调整后奇数的个数可以通过公式计算:
复杂度分析
- 时间复杂度:
O(1)
,所有操作均为常数时间操作。 - 空间复杂度:
O(1)
,仅使用常数变量。
代码
/**
* @param {number} low
* @param {number} high
* @return {number}
*/
var countOdds = function (low, high) {
if (low % 2 != 0) {
// 若 low 是奇数,调整为前一个偶数
low -= 1;
}
if (high % 2 != 0) {
// 若 high 是奇数,调整为后一个偶数
high += 1;
}
return (high - low) / 2; // 奇数个数为调整后范围的长度的一半
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
2980 | 检查按位或是否存在尾随零 | 位运算 数组 | 🟢 | 🀄️ 🔗 |