LeetCode第1523题:区间奇数计数代码错误排查及正确实现
LeetCode 1523题「区间范围内奇数的数目」错误分析与正确解法
错误原因
你的代码存在两个问题:
- 循环范围遗漏了high值:Python的
range(low, high)是左闭右开区间,只会遍历low到high-1的数。当测试用例low=3、high=7时,循环只处理了3、4、5、6,漏掉了7这个奇数,所以输出2而不是预期的3。 - 遍历法效率低下:当
high和low差距极大时,遍历整个区间的时间复杂度为O(n),远不如数学公式计算高效。
修正后的遍历实现
只需将循环范围改为包含high即可:
class Solution: def countOdds(self, low: int, high: int) -> int: count = 0 for i in range(low, high + 1): if i % 2 != 0: count += 1 return count
高效数学公式解法
通过数学推导可以直接计算出结果,时间复杂度为O(1):
- 公式逻辑:
(high + 1) // 2是从0到high的奇数总数,low // 2是从0到low-1的奇数总数,两者相减即为[low, high]区间内的奇数数目。
代码实现:
class Solution: def countOdds(self, low: int, high: int) -> int: return (high + 1) // 2 - low // 2
内容的提问来源于stack exchange,提问作者childoflogos
相关产品推荐
相关产品推荐

