異或 運算的妙用

2021-05-09 14:02:39 字數 471 閱讀 2289

現有1,1,2,2,3,3,....,n,n共2n個數,其中各個數字排列的順序是任意的,是雜亂放的,即沒有排序。現在刪除了其中的乙個數剩下了2n-1個數,求刪除的那個數?

可能大多數人的第一想法是:用2n個數的總和(n*(n+1))減去2n-1個數的總和,不錯,想法是正確的。但是,放在計算機中考慮的話,此方法就不太可行了,先不考慮演算法效率的問題,主要是因為2n個數的總和不知道具體有多大,所以可能存在溢位的問題。那有其他更好的辦法嗎?有!

下面是用異或(^)運算來解答這個題目的,不僅效率高而且不存在溢位的問題:

總結:

上面演算法的思想是:當存在n個不連續的數的時候,且每個不同的數都成對出現(2,4,...個),那麼同一類數字之間異或(相同為0,不同為1)結果為0。比如:上題中存在兩個數字3,二進位制即11,那麼,11^11等於00,也就是,十進位制結果為0。所以,遍歷2*n-1次後,剩下的那個數就是從2n個數中刪除的那個數。

異或的妙用

給你1 1000個連續自然數,然後從中隨機去掉兩個,再打亂順序,要求只遍歷一次,求出被去掉的兩個數。這題其實挺為面試者的,因為要求1分鐘內說出解法,且不能使用計算機 紙和筆。如果之前沒有遇到過類似的題目,加上面試時的緊張心情,很難能在那麼短的時間裡想到解決方案,至少我做不到。好在我有時間,上網看了一...

異或運算 有趣的異或運算

異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...

C語言 異或 的妙用

異或 位運算符號,相同的位置0,不同的位置1 例 0101 0001 0100 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?例 輸入 2 2 1 輸出 1 輸入 2 3 3...