劍指offer 陣列中找兩個不重複數字

2021-08-18 07:21:21 字數 692 閱讀 2800

問題描述:

陣列中除了兩個數之外,其他數都出現兩次,找出陣列中兩個只出現一次的數字。

解題思路:首先可以思考這樣的情況,兩個相同的數字進行異或,異或的結果等於0。所以我們可以以此作為解題的突破口。如果只有乙個數字的話,那麼我們讓所有的數字分別進行異或,最終得到的結果就是這個只出現一次的數,然後定義乙個指標帶出資料即可。

可是問題是有兩個資料,我們通過異或每一次只能篩選乙個數字,是不是可以通過怎樣的方法將兩個數字進行分組呢,這樣每一組只出現乙個數字,可以分別對兩組資料進行異或處理即可得到只出現一次的數。將兩個資料分開前提是我們要知道兩個數字不同,先拿到所有數字異或的結果,然後找到

最低位是1的數字,你可能要問了:為什麼找最低位是1的數字呢?因為所有的數字進行異或得到的結果,其實等於這兩個不相等資料的異或結果。所以哪一位是1說明這一位有乙個資料是1,乙個資料為0.以此進行劃分。

劃分之後的兩組資料,我們對兩組資料再進行異或處理 ,最終得到的就是我們想要的結果了。

**實現如下:

class solution 

int tmp=0;

for(int i=0;i>1;

count++;

}return count;

}bool isbit(int num,int count)

};

劍指offer 合併兩個排序的陣列

1 題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。2 思路 運用遞迴 如果第乙個鍊錶為空,則直接返回第二個鍊錶 如果第二個鍊錶為空,則直接返回第乙個鍊錶 如果第乙個鍊錶中的值小於第二個鍊錶中的值,則將乙個鍊錶中的相應元素插入鍊錶 如果第乙個鍊錶...

劍指offer 兩個棧實現佇列

使用兩個棧實現乙個佇列。棧是先進後出,佇列是後進先出。如果只有乙個棧那麼是無法實現佇列的,但是兩個棧完全可以。如下 templateclass cqueue templatet cqueue deletehead if stack2.size 0 throw queue is empty t ret...

《劍指offer》 合成兩個單鏈表

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。思路 魯棒性 如果list為空,返回list2 如果list2為空,返回list1 如果兩者都為空,返回空 比較list1.val和list2.val的頭節點,假設頭節點是list1 比較list1.next...