Google筆試記分享

來源:瑞文範文網 1.74W

Google筆試記分享


google筆試是沒有門檻的。這樣說是因爲google根本沒有限制筆試的人數,開了n個教室,讓n多人蔘加不過筆試本身卻有門檻,看了題目就知道。
本來想上午寫寫的,但是,嗯,出於攢人品的目的,還是等到現在才寫現在,面試通知已經發過,很顯然我又被無視了ok,那也不錯,我也沒怎麼準備這些東西呢,倒不是說我不重視,而是事情太多唔,多少算是一種經驗了。
回來說說昨天的筆試。題目的量並不大,除了幾個單選題,剩下就是三個編程或算法題。單選就不說了,考得比較基礎,涉及c語言常識、數據結構、文法、操作系統,主要說說大題。
大題雖然題型不一,但都有一個重要特點:考遞歸。精確點說,我每一題都用到了遞歸。
第一個的題目(嗯,記的不是很完整):
在一棵(排序?)二叉樹中搜索指定值,數據結構定義爲(唉唉,數據結構的具體名字都不記得了,my god):
struct node
{
node * lnext;
node * rnext;
int value;
};
函數定義爲(情況同上,啥都記不清了):
node * search(node * root, int value)
{
}
實現這個search函數。
用遞歸,經典的樹的遍歷,pass先。
第二個的題目:
計算tribonaci隊列(嗯,九成九記錯了那個單詞),規則是t(n) = t(n - 1) t(n - 2) t(n -3),其中t(0) = t(1) = 1,t(2) = 2。
函數定義:
int tribonaci(int n) {
}
備註,不考慮證整數溢出,儘可能優化算法。
這一題我一看就知道要考什麼,很顯然的遞歸定義,但也是很顯然的,這裏所謂的優化是指不要重複計算。
簡單的說,在計算t(n)的時候要用到t(n - 1)、t(n - 2)和t(n - 3)的結果,在計算t(n - 1)的時候也要用到t(n - 2)和t(n - 3)的結果,所以在各項計算的時候必須把以前計算的結果記錄下來,去掉重複計算。這裏用到的一點小技巧就是要新寫一個函數用來做這種事情,嗯,看看我寫的代碼吧!
/**
get the value of t(n - 1), and retrieve the result of
t(n - 2) and t(n - 3).
@param[in] n the n in t(n).
@param[out] mid value of t(n - 2).
@param[out] right value of t(n - 3).
@return value of t(n - 1).
*/
int find_trib(int n, int mid, int right)
{
if (3 == n)
{
mid = 1;
right = 1;
return 2;
}
else
{
int temp;
mid = find_trib(n - 1, right, temp);
return mid right temp;
}
}
/**
find value of t(n).
@param[in] the n in t(n).
@return value of t(n).
@note t(n) = t(n - 1) t(n - 2) t(n - 3) (n 2)
t(0) = t(1) = 1, t(2) = 2.
*/
int tribonaci(int n)
{
if (n 0)
{
// undefined feature.
return 0;
}
if (0 == n || 1 == n)
{
return 1;
}
if (2 == n)
{
return 2;
}
int mid, right;
int left = find_trib(n, mid, right);
return left mid right;
}
啊啊,對了,答卷的時候我可沒心情寫註釋剛纔到 XX上測試了一下,貌似沒有啥問題。唉,看來我多少還是懂一點算法的
第三個的題目:
在一個無向圖中,尋找是否有一條距離爲k的路徑,描述算法即可,不用實現,分析算法的時間和空間複雜度,儘量優化算法。
ok,這個就是傳說中的軟肋了我也就不把自己的答案寫出來了(丟人啊),雖然後來仔細想想,我那個挫挫的方法也能夠用只是效率

thats all.

熱門標籤