1. leetcode 136這個題比較簡單,但如果用異或操作,可以不使用額外空間來實現。
原理就是:
先對陣列中所有元素進行異或運算。
nums[0] ^ nums[1] ^ … ^ nums[nums.length - 1]
利用上面提到的兩個性質:
利用交換律將相同的元素交換在一起執行異或運算,這樣可得到:只出現一次的數字^0,再根據第二條性質,所以最後異或得到的結果就為只出現一次的數字。
**如下:
class
solution
return single;
}}
2. leetcode 389
這道題的思路也基本相同,只不過是把整型陣列變成了字串而已。
這道題我們可以把兩個字串看成兩個字元陣列,分別對兩個字串中的char元素進行異或:
s.charat(0)^s.charat(1) ^… ^s.charat(s.length()-1) ^ t.charat(0) ^ t.charat(1) ^… ^t.charat(t.length()-1)
利用上面提到的兩個性質:
利用交換律將相同的元素交換在一起執行異或運算,可得到:被新增的字母的ascii碼值^0,再根據第二條性質,所以最後異或得到的結果就為被新增的字母的ascii碼值,最後再利用型別轉換轉換為char型就得到了最後的結果。
**如下:
class
solution
for(
int i =
0; i < t.
length()
;++i )
return
(char
)ret;
}}
看了這兩個例子,是不是覺得異或運算是乙個很神奇的運算呢?
如果覺得這篇文章對你有幫助,記得給卑微博主點贊、收藏加關注哦!!!
位運算子之異或的化腐朽為奇妙
記得lucida大神部落格寫過。函式式程式語言是ms面試題會涉及的東西。還有位運算。雖然我都不會運用。以下談一下異或的強大之處。總結來自july大神微博推薦 的一篇部落格。儘管博主是web開發者。可是這篇日誌數學技巧極強 先來一道leetcode通過率最高的題目,求乙個陣列中盡出現一次的數字。其它數...
異或運算 有趣的異或運算
異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...
leetcode 1486 陣列異或操作
1486.陣列異或操作 給你兩個整數,n 和 start 陣列 nums 定義為 nums i start 2 i 下標從 0 開始 且 n nums.length 請返回 nums 中所有元素按位異或 xor 後得到的結果。例子 輸入 n 5,start 0 輸出 8 解釋 陣列 nums 為 0...