1. 程式人生 > 其它 >Leetcode之丟失的數字(268)、只出現一次的數字III(260)

Leetcode之丟失的數字(268)、只出現一次的數字III(260)

技術標籤:leetcode# 位運算leetcode

1、丟失的數字(268)

題目描述:

【簡單】

給定一個包含 [0, n] 中 n 個數的陣列 nums ,找出 [0, n] 這個範圍內沒有出現在陣列中的那個數。

進階:

你能否實現線性時間複雜度、僅使用額外常數空間的演算法解決此問題?

示例 1:

輸入:nums = [3,0,1]
輸出:2
解釋:n = 3,因為有 3 個數字,所以所有的數字都在範圍 [0,3] 內。2 是丟失的數字,因為它沒有出現在 nums 中。

示例 2:

輸入:nums = [0,1]
輸出:2
解釋:n = 2,因為有 2 個數字,所以所有的數字都在範圍 [
0,2] 內。2 是丟失的數字,因為它沒有出現在 nums 中。

題目連結

思路分析:

1、與之前解過的 只出現一次的數字 有異曲同工之處,這裡也可以使用「異或運算」巧妙的解決問題。
2、異或運算的結合律:a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;

  • 自反:a ^ b ^ a = b.

3、需求:陣列的長度為n,找到陣列中在[0,n]缺失的範圍
4、如果我們將陣列與[0,n]即陣列的下標+陣列的長度進行異或,那麼最後的結果就是缺失的數字

解答:

def missingNumber(self, nums):
        missing = len(nums)
        for
i, num in enumerate(nums): missing ^= i ^ num return missing
  • 時間複雜度: O ( n ) O(n) O(n)
  • 空間複雜度: O ( 1 ) O(1) O(1)

2、只出現一次的數字III(260)

題目描述:

【中等】
給定一個整數陣列 nums,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。 找出只出現一次的那兩個元素。

題目連結

思路分析: