【LeetCode】記與Single Number相關

        心情不好,寫文章讓自己忙起來就什麼都忘了。

        寒假知道了LeetCode,準備以後開始在上面刷題。與大牛們差距太大,努力追趕啊。

題目描述是這樣:Given an array of integers, every element appears twice except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

翻譯過來就是:給定一個整型數組,除了一個元素外,其餘元素均成對出現。找出那個唯一出現一次的元素。

注意:你的算法應該有一個線性時間複雜度,你可以不使用額外空間實現它嗎?

我剛開始天真地類比快排寫了個算法,提交上去就Time Limit Exceeded 了,進入Discuss,看大牛們的代碼,真是拍案叫絕啊:

public static int singleNumber(int[] A) {
        int result = 0; 
        for (int i : A) 
        	result ^= i ; 
        return result ;
    }

因爲最近剛好在看《深入理解計算機系統》第二章,就一眼看出了原理:對於任何值a來說,a^a=0,因此有(a^b)^a=b,推廣一下就是這道題的要求。啓示:位級運算的效率很高。有時候複雜題目背後其實是某個公式的演繹。

以後多刷題少扯淡了!!!



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