1. 程式人生 > 實用技巧 >python實現尋找 n 個數的序列中缺失的數


python實現尋找 n 個數的序列中缺失的數


給定一個包含 0, 1, 2, ..., n 中 n 個數的序列,其中缺了一個數字,找出這個數字

示例 1:
輸入: [3,0,1]
  輸出: 2

示例 2:
輸入: [9,6,4,2,3,5,7,0,1]  
輸出: 8


設計思路:
思路一:當n不太大時,可以先求1~n的和,然後減去數列中所有數的和,即為缺失的那個數字,時間複雜度O(n),空間複雜度O(1)
思路二:利用異或特性,先異或1~n,再異或數列中所有數,將兩個結果異或,利用異或的結合律和恆等率特性,即可得到缺失的這個數

def getnum(arr):
    if arr == None or len(arr)<=0:
        print('輸入引數錯誤')
        return -1
    suma = 0
    sumb = 0
    i = 0
    while i<len(arr):
        suma = suma + arr[i]
        sumb = sumb + i
        i+=1
    sumb=sumb+len(arr)
    return sumb-suma

def getnum1(arr):
    if arr == None or len(arr)<=0:
        print('輸入引數錯誤')
        return -1
    a=arr[0]
    b=1
    lens = len(arr)
    i=1
    while i<lens:
        a=a^arr[i]
        i+=1
    i=2
    while i<=lens:
        b=b^i
        i+=1
    return a^b

if __name__=='__main__':
    arr=[9,6,4,2,3,5,7,0,1]
    print(getnum1(arr))