【剑指offer】面试题40:数组中只出现一次的数字
生活随笔
收集整理的這篇文章主要介紹了
【剑指offer】面试题40:数组中只出现一次的数字
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
一個整型數組里除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。
思路:
因為只有兩個只出現一次的數字,所以所有數字進行異或之后得到值res一定不是0.這樣,res中其中至少1bit不是0,我們根據這個bit是否為0把數組分為兩組,兩個只出現一次的數字肯定在不同的組。其他出現兩次的數組兩個肯定在相同組,而兩個相同的數組異或之后是0,任意一個數字與0異或還是該數字本身。
代碼:
class Solution { public:void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {if(data.size()<=1) return;int res=data[0];for(int i=1;i<data.size();++i)res=res^data[i];int k=find1Index(res);*num1=0;*num2=0;for(int i=0;i<data.size();++i){if(kBitIs1(data[i],k))*num1=(*num1)^data[i];else*num2=(*num2)^data[i];}} private:bool kBitIs1(int num, int k){return ((num>>k)&1)!=0;}int find1Index(int num){//找最右邊的1的位數int k=-1;while(num){++k;if(num&1){//++k;這句應該不管if-else都要執行才對return k;}elsenum=num>>1;//不能只寫成num>>1; }return k;} };?
轉載于:https://www.cnblogs.com/buxizhizhou/p/4764780.html
總結
以上是生活随笔為你收集整理的【剑指offer】面试题40:数组中只出现一次的数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5中的时间类型,另外EL表达式的
- 下一篇: lvalue-xvalue-prvalu