Leetcode 268:缺失數字(最詳細的解法!!!)
阿新 • • 發佈:2018-11-09
給定一個包含 0, 1, 2, ..., n
中 n 個數的序列,找出 0 … n 中沒有出現在序列中的那個數。
示例 1:
輸入: [3,0,1]
輸出: 2
示例 2:
輸入: [9,6,4,2,3,5,7,0,1]
輸出: 8
說明:
你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?
解題思路
我們首先想到的方法是建立一個數組,然後將所以元素放進去,然後遍歷陣列看那個數不在即可,例如
nums: 3 0 1
0 1 2 3
1 1 0 1
但是題目要求我們不適用額外的空間,所以我們這個方案就不能使用了。我們還可以怎麼做呢?我們可以將所以數加起來得到一個缺失一個數字的和
class Solution:
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
return n*(n+1)// 2 - sum(nums)
還有一種做法是使用xor
,我們知道a^b^b=a
,類似於消除遊戲的感覺O(∩_∩)O~。所以我們對於nums
中的所有數都做這種操作,最後剩下的沒有消除的元素就是我們缺失的。
class Solution:
def missingNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
result = len(nums)
for i in range(len(nums)):
result = result^i^nums[i]
return result
reference:
https://leetcode.com/problems/missing-number/discuss/69832/1+-lines-Ruby-Python-Java-C++
我將該問題的其他語言版本新增到了我的GitHub Leetcode
如有問題,希望大家指出!!!