1. 程式人生 > 其它 >leetcode: 1523. 在區間範圍內統計奇數數目

leetcode: 1523. 在區間範圍內統計奇數數目

題目描述

給你兩個非負整數 low 和 high 。請你返回 low 和 high 之間(包括二者)奇數的數目。

示例 1:

輸入:low = 3, high = 7
輸出:3
解釋:3 到 7 之間奇數數字為 [3,5,7] 。

示例 2:

輸入:low = 8, high = 10
輸出:1
解釋:8 到 10 之間奇數數字為 [9] 。

官方題解

  1. 0~high 的奇數個數 - 0~low 的奇數個數
  2. 區間[0,x]中的奇數個數: $ pre = [\frac{x+1}{2}] $
  3. 故答案為 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. 十進位制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$

  1. 十進位制 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
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。