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 | 检查按位或是否存在尾随零 | 位运算 数组 | 🟢 | 🀄️ 🔗 |
