leetcode: 1523. 在區間範圍內統計奇數數目
阿新 • • 發佈:2022-03-23
題目描述
給你兩個非負整數 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~high 的奇數個數 - 0~low 的奇數個數
- 區間[0,x]中的奇數個數: $ pre = [\frac{x+1}{2}] $
- 故答案為 pre(high) - pre(low-1)
- low-1:不包含low
class Solution: def countOdds(self, low: int, high: int) -> int: pre = lambda x: (x + 1) >> 1 return pre(high) - pre(low - 1)
補充 '>>'
通過二進位制移位運算子(<<, >>)實現 乘/除2
例如:
- 十進位制1 --> 二進位制 0000 0001
-
1 << 1 : 向左移動1位
0000 0001 --> 0000 0010 ( 2 ) # $ \times 2$ -
1 << 2 : 向左移動2位
0000 0001 --> 0000 0100 ( 4 ) # $ \times 2$ -
2 << 2 : 2向左移動2位
0000 0010 --> 0000 1000 ( 8 ) # $ \times 2$
- 十進位制 9 --> 二進位制 0000 1001
- 9 >> 1
0000 1001 --> 0000 0100 ( 4 ) - 9 >> 2
0000 1001 --> 0000 0010 ( 2 )
本題中的 \((x+1) >> 1\) 即 \((x+1)/2\)
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/count-odd-numbers-in-an-interval-range
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。