Skip to main content

5456. 在区间范围内统计奇数数目 [easy]

5456. 在区间范围内统计奇数数目 [easy]

第 31 场双周赛 https://leetcode-cn.com/contest/biweekly-contest-31

https://leetcode-cn.com/contest/biweekly-contest-31/problems/count-odd-numbers-in-an-interval-range/

给你两个非负整数 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

Second Try

2020-07-26

看别人代码是这么个写法,count_odds是包含x在内的奇数的数量,可以测试x为奇数和偶数情况下(x + 1) // 2的案例就知道了,因此count_odds(hight) - count_odds(low - 1)就统计完了整个区间。 如果统计所有偶数,也有类似写法。

class Solution:
def countOdds(self, low: int, high: int) -> int:
# 包含x在内的奇数的数量,不知道怎么个总结法
count_odds = lambda x : (x + 1) // 2
return count_odds(high) - count_odds(low - 1)

First Try

2020-07-25

找了几个数分别测试了low、high为奇数偶数的4种情况,判断出规律,但还是花费了几分钟时间。。

class Solution:
def countOdds(self, low: int, high: int) -> int:
oddLow = low % 2 == 1
oddHigh = high % 2 == 1

if oddLow and oddHigh:
return 2 + (high - low) // 2 - 1
elif oddLow or oddHigh:
return 1 + (high - low) // 2
else:
return (high - low) // 2