找出2N+1個兩兩配對數中落單那個

對於這個問題,最暴力的求解方法是採用遍歷的操作,然後全部進行,以下方法使用了一個輔助類,其原理是一個智能容器,當插入元素的時候判斷集合中是否已經有了該元素,沒有就添加,有的話就刪除,如下
#!/usr/bin/python
def findSingle(ls):
    con = Container()
    for i in range(len(ls)):
        con.add(ls[i])
    con.showResult()

class Container:
    def __init__(self):
        self.data = []
        self.count = 0

    def add(self,dat):
        if self.count > 0:
            flag = False
            index = 0
            for i in range(self.count):
                if self.data[i] == dat:
                    flag = True
                    index = i
                    break
            if flag:
                del self.data[index]
                self.count = self.count - 1
            else:
                self.data.append(dat)
                self.count=self.count + 1
        elif self.count == 0:
            self.data.append(dat)
            self.count = self.count + 1
            
    def showResult(self):
        for i in range(len(self.data)):
            print self.data[i]

if __name__=="__main__":
    ts = [1,2,1,2,3,4,3]
    findSingle(ts)
當時我就拿着這個算法給面試官看,面試官不是很滿意,後來回來查詢了一下,有個比較簡單的辦法,那就是採用異或操作
#!/usr/bin/python
def findSingle(lt):
    l = len(lt)
    ret = 0
    for i in range(l):
        ret^=int(lt[i])
    return ret

if __name__=="__main__":
    ts = "12123447887"
    print findSingle(ts)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章