Leetcode之丟失的數字(268)、只出現一次的數字III(260)
阿新 • • 發佈:2021-01-24
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,其中恰好有兩個元素只出現一次,其餘所有元素均出現兩次。 找出只出現一次的那兩個元素。
思路分析: