136. 只出現(xiàn)一次的數(shù)字

一、題目原型:

給定一個非空整數(shù)數(shù)組擅羞,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次义图。找出那個只出現(xiàn)了一次的元素

二、題目意思剖析:

說明:
你的算法應該具有線性時間復雜度召烂。 你可以不使用額外空間來實現(xiàn)嗎碱工?
示例 1:
輸入: [2,2,1]
輸出: 1

示例 2:
輸入: [4,1,2,1,2]
輸出: 4

三、解題思路:

第一種

根據(jù)題目意思,數(shù)組的個數(shù)一定是奇數(shù)怕篷。(2+2+2+1+2)類似這樣,先排個序历筝,然后 i = i + 2,一旦前后不同廊谓,就return前面那個數(shù)字梳猪。

func singleNumber(_ nums: [Int]) -> Int {
    
    if nums.count == 1 {
        return nums.first!
    }
    
    // 0 0 1 1 2 3 3
    // 除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次 
    // 說明數(shù)組個數(shù)一定是奇數(shù)
    var mutnums = nums.sorted()
    var index: Int = 0
    while index < mutnums.count {
        //print(index)
        if index+1 >= mutnums.count {
            return mutnums[index]
        }
        //上面代碼已經(jīng)屏蔽掉了index+1越界的情況
        if mutnums[index] != mutnums[index+1] {
            return mutnums[index]
        }
        index = index + 2
    }
    //print(mutnums)
    return -1
}
第二種:異或法

找到數(shù)組里唯一不同的那個數(shù)字蒸痹,其實可以用異或法春弥。
兩個相同數(shù)字 異或所得到的是0,可以測試下叠荠。

{
    var temp: Int = 2
    temp ^= 2
    print(temp)
}
打印的temp = 0

0異或任何數(shù)字匿沛,都等于原數(shù)字本身

{
    var temp: Int = 0
    temp ^= 2
    print(temp)
}
打印的temp = 2
原理:

假設如果 A = 60,且 B = 13榛鼎,現(xiàn)在以二進制格式表示逃呼,它們?nèi)缦滤荆?/p>

A = 0011 1100
B = 0000 1101


A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

& 兩者同時為真才為真;| 兩者一者為真就為真者娱;^相同為假抡笼,不同為真

所以,我們只要用0去異或數(shù)組里所有的數(shù)字黄鳍,最后得到的就是不同的那個數(shù)字推姻。

func singleNumber(_ nums: [Int]) -> Int {
    if nums.count == 1 {
        return nums.first!
    }
    // 異或
    var temp: Int = 0
    for num in nums {
        temp ^= num
    }
    return temp
}

四、小結(jié)

第一種方法耗時 144ms际起,超過19.02%提交記錄拾碌。
第二種方法耗時 32ms,超過68.1%提交記錄街望。
總提交數(shù):16校翔。
個人博客地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灾前,隨后出現(xiàn)的幾起案子防症,更是在濱河造成了極大的恐慌,老刑警劉巖哎甲,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔫敲,死亡現(xiàn)場離奇詭異,居然都是意外死亡炭玫,警方通過查閱死者的電腦和手機奈嘿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吞加,“玉大人裙犹,你說我怎么就攤上這事尽狠。” “怎么了叶圃?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵袄膏,是天一觀的道長。 經(jīng)常有香客問我掺冠,道長沉馆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任德崭,我火速辦了婚禮斥黑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘接癌。我一直安慰自己心赶,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布缺猛。 她就那樣靜靜地躺著缨叫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荔燎。 梳的紋絲不亂的頭發(fā)上耻姥,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音有咨,去河邊找鬼琐簇。 笑死,一個胖子當著我的面吹牛座享,可吹牛的內(nèi)容都是我干的婉商。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼渣叛,長吁一口氣:“原來是場噩夢啊……” “哼丈秩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起淳衙,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蘑秽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后箫攀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肠牲,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年靴跛,在試婚紗的時候發(fā)現(xiàn)自己被綠了缀雳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡梢睛,死狀恐怖俏险,靈堂內(nèi)的尸體忽然破棺而出严拒,到底是詐尸還是另有隱情扬绪,我是刑警寧澤竖独,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站挤牛,受9級特大地震影響莹痢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墓赴,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一竞膳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诫硕,春花似錦坦辟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藕届,卻和暖如春挪蹭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背休偶。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工梁厉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踏兜。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓词顾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碱妆。 傳聞我的和親對象是個殘疾皇子肉盹,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容