題目:乙個陣列中有2個數只出現了一次,其他的數都出現了兩次,寫乙個演算法找出這兩個只出現一次的數
分析:該題目可以通過異或完成,先讓我舉乙個例子
4:0100
^5:0101
1: 0001
^5:0101
4:0100
上面的例子說明4^5^5=4;同理4^5^4=5
int find_first_1(int n)
return index;
}這個函式的返回值index比如如果num=1100,那麼index=0100=4
for(int i=0;i這個函式是進行分組
我打個比方: 1 1 2 2 5 3 ,那麼互相異或以後的值temp=6(0110),那麼返回的index=2
那麼1 1 2 2 5 3 分別與2相與則為0000 ,0000,0010,0010,0000,0010,那麼我們將最後乙個為0的分為一組,將最後乙個位為1的分為另外一組
最後為0的那組:1,1,5,
最後不為0的那組:2,2,3
然後組與組之間的元素互相以後
組0 最後異或結果為5
組1最後異或結果為3:
這樣就找到了 陣列中這兩個只出現一次的數,下面貼出**:
// find_first_1.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include
using namespace std;
//尋找陣列中兩個單獨出沒的數字
int find_first_1(int n)
return index;
}void find(int * arr, int len, int & num1, int & num2)
;int arr=;
find(arr,8,num1,num2);
printf("%d %d\n",num1,num2);
cout<
// find_first_1.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include using namespace std;
//尋找陣列中兩個單獨出沒的數字
int find_first_1(int n)
return index;
}void find(int * arr, int len, int & num1, int & num2)
{ int temp = 0;
for(int i=0;i
乙個百度的面試題目
題目 乙個陣列中有2個數只出現了一次,其他的數都出現了兩次,寫乙個演算法找出這兩個只出現一次的數 分析 該題目可以通過異或完成,先讓我舉乙個例子 4 0100 5 0101 1 0001 5 0101 4 0100 上面的例子說明4 5 5 4 同理4 5 4 5 int find first 1 ...
最新百度面試題目一
現在有1千萬個隨機數,隨機數的範圍在1到1億之間。現在要求寫出一種演算法,將1到1億之間沒有在隨機數中的數求出來。解決辦法 一 用乙個32位的整數32位表示32個數,1億 32 3125000,使用3.125 4m byte空間即可儲存1億個數,即index 3125000 二 對於數n,n 1 3...
百度面試題的乙個完整思路
為分析使用者行為,系統常需儲存使用者的一些query,但因query非常多,故系統不能全存,設系統每天只存m個query,現設計乙個演算法,對使用者請求的query進行隨機選擇m個,請給乙個方案,使得每個query被抽中的概率相等,並分析之,注意 不到最後一刻,並不知使用者的總請求量。做法 1 如果...