寒假知道了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,推廣一下就是這道題的要求。啓示:位級運算的效率很高。有時候複雜題目背後其實是某個公式的演繹。
以後多刷題少扯淡了!!!