乙個百度的面試題目

2021-08-27 00:20:38 字數 1262 閱讀 7907

題目:乙個陣列中有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 如果...