騰訊公司的幾道歷年面試題精選

2021-06-28 10:05:03 字數 2296 閱讀 1573

1. 在乙個檔案中有10g個整數,亂序排列,要求找出中位數。記憶體限制為2g。

解答:

首先假設是32位無符號整數。

1. 讀一遍10g個整數,把整數對映到256m個區段中,用乙個64位無符號整數給每個相應區段記數。

說明:整數範圍是0 - 2^32 - 1,一共有4g種取值,對映到256m個區段,則每個區段有16(4g/256m = 16)種值,每16個值算一段, 0~15是第1段,16~31是第2段,……2^32-16 ~2^32-1是第256m段。乙個64位無符號整數最大值是0~8g-1,這裡先不考慮溢位的情況。總共占用記憶體256m×8b=2gb。

2. 從前到後對每一段的計數累加,當累加的和超過5g時停止,找出這個區段(即累加停止時達到的區段,也是中位數所在的區段)的數值範圍,設為[a,a+15],同時記錄累加到前乙個區段的總數,設為m。然後,釋放除這個區段占用的記憶體。

3. 再讀一遍10g個整數,把在[a,a+15]內的每個值計數,即有16個計數。

4. 對新的計數依次累加,每次的和設為n,當m+n的值超過5g時停止,此時的這個計數所對應的數就是中位數。

解答:

一天總共有 3600*24 = 86400秒。

定義乙個長度為86400的整數陣列int delta[86400],每個整數對應這一秒的人數變化值,可能為正也可能為負。開始時將陣列元素都初始化為0。

然後依次讀入每個使用者的登入時間和退出時間,將與登入時間對應的整數值加1,將與退出時間對應的整數值減1。

這樣處理一遍後陣列中儲存了每秒中的人數變化情況。

3.  兩個整數集合a和b,求它們的交集。

解答:

1. 讀取整數集合a中的整數,將讀到的整數插入到map中,並將對應的值設為1。

2. 讀取整數集合b中的整數,如果該整數在map中並且值為1,則將此數加入到交集當中,並將在map中的對應值改為2。

通過更改map中的值,避免了將同樣的值輸出兩次。

4.  找出1到10w中沒有出現的兩個數字

解答:

解法一:

申請10w個bit的空間,每個bit代表乙個數字是否出現過。

開始時將這10w個bit都初始化為0,表示所有數字都沒有出現過。

然後依次讀入已經打亂循序的數字,並將對應的bit設為1。

當處理完所有數字後,根據為0的bit得出沒有出現的數字。

解法二:

首先計算1到10w所有數的平方和,然後計算給定數字的平方和,將兩次的值相減,即可得到那兩個數的平方和,假設為m。

計算1到10w所有數的和,然後計算給定數字的和,將兩次的值相減,即可得到那兩個數的和,假設為n。

設這兩個數為x和y,則:

x + y = n

x^2 + y^2 = m

求解上面的方程,即可得到x和y的值。

5.乙個檔案中有40億個整數,每個整數為四個位元組,記憶體為1gb,寫出乙個演算法:求出這個檔案裡的整數裡不包含的乙個整數

解答: 方法一:

使用位圖。4位元組的int,有4g個不同的值。每個值,對應1bit,則共需 4g/8 = 512m 記憶體。初始狀態,對512m的點陣圖清零。然後,對這40億個整數進行統計。如果某個值出現了,那麼就把這個值對應的bit置位。最後,掃瞄位圖,找到乙個沒有被置位的bit即可。

方法二:

分段統計。long long cnt[512m/8=64m]對應數值空間的64m個資料段。每個資料段包含64個不同值,用乙個long long作為這個資料段內的點陣圖,點陣圖佔64m*8=512m。

這樣掃瞄一遍40億個整數後,從陣列中找到乙個計數小於64的元素,然後檢視它的點陣圖,找出未出現的元素。

方法二平均效能應該比方法一快,但它佔的記憶體很恐怖。其實,這兩種方法都不是很實際,總共1g的記憶體,演算法就消耗512m甚至1g,那剩下的系統程式怎麼辦?os都跑不起來了吧。

解答:

[cpp]view plain

copy

struct

trienode  

騰訊幾道面試題

1.什麼是記憶體洩露,怎麼檢測自己的程式的記憶體洩露 2.什麼是虛函式,什麼是抽象類。3 求下面類的記憶體大小 class int a void f1 virture void f2 4 陣列,鍊錶,樹和雜湊表在記憶體中是怎麼樣組織的 5 this指標的問題 6 寫出樹的非遞迴演算法。7還有道智力題...

幾道面試題

系統呼叫與函式的區別 從程式完成的功能來看,函式庫提供的函式通常是不需要作業系統的服務,函式是在使用者空間內執行的,除非函式涉及到i o操作等,一般是不會切到核心態的。系統呼叫是要求作業系統為使用者提供程序,提供某種服務,通常是涉及系統的硬體資源和一些敏感的軟體資源等。函式庫的函式,尤其與輸入輸出相...

幾道面試題

1 下列程式片段執行時間排序 1 for uint i 0 i 1024 i char url char malloc 4096 memset url,0x0,4096 free url 2 for uint i 0 i 1024 i 3 char url char malloc 4096 for ...