谷歌面試未來的工程師的題目一向是很難的。但下面這些不同于以往你看到的那些,因為它們還需要你具備一定的計算和邏輯基礎。
1.一排房子涂色的問題解答
問題:我們會有一排房子,你可以理解為“N”間,其中N是整數。每個房子可以涂成紅色、綠色或藍色。每幢房子和相鄰間的房子必須是不一樣的,因為每種顏色的成本不同,所以還要考慮到盡可能降低成本。
答案:這個問題可以建模變成一個“動態編程”問題的解決方法,這會有效地解決大范圍的搜索和優化問題。
這里有代碼可以供大家參考:C[c] = H[c] + min(C[i-1][x]) x belongs to {Red, Blue, Green} x belongs to c.
2.在一個句子中實現每個單詞的反向字符
問題:Convert “——— “my career stack” ———” to “”——— “ym reerac kcats” ———”.
答案:不僅僅是翻轉每個字符,還需要采取一個更聰明的方式。
你可以通過翻轉每個字符的方式解決這個問題,但有一個更聰明的叫遞歸的辦法來解決它。這才是谷歌想要的結果:找到解決問題最聰明的工程師,而不僅僅是獲得一個正確的解決方案。
3.找到購買和出售股票的最好時間
問題:如果你只能購買和出售相同的股票份額,找到一個買入和賣出的最佳時間。
答案:記住你在買股票之前,可以把它賣掉。這一點限制實際上完全改變了問題的結果。所以,現在你要跟蹤最低值指數。下面是整體解決方案:
為了有效地解決這個問題,你需要跟蹤最低值的指數。你需要尋遍并發現最低值指數達到一個新的最小值。然后,比較最低值與當前元素的差異。在買進和賣出時的差異確定是最大的差異。
4.N個硬幣一排怎么選最大
問題:一排硬幣由兩名球員輪流各取一枚,直到拿完為止,誰拿到的金額大誰就贏了。
答案:你一定要先拿!如果你考慮奇數或者偶數的硬幣,那么你至少不會輸。這其實是另一種“動態編程”的問題。
5.懸空指針是什么?
問題:很簡單對嗎?
答案:那是毀滅性的錯誤。懸空的指針是一個不再分配到存儲的指針。但有一個問題,這個程序在創建之后不會崩潰,而回執行很長一段時間。每個工程師都了解這些問題,因為它們最終會殺死一些最大、最復雜的服務。
6.從不公平的硬幣上找到一個公平的結果
問題:我們有一個不公平的硬幣,因為其正反兩面結果的概率不同,如何才能得到公平的結果。
答案:拋兩次硬幣。有四種可能發生,如果有兩個正面或者反面的結果,你應該放棄。然后留下一個正面、一個反面的結果,這才是你想要的結果。
7.在字典中找到一個單詞是由兩個單詞組成的
問題:在字典里找到一個單詞是由兩個單詞組成的,比如“newspaper”是由“news”和“paper”組成的。
答案:將單詞分成兩個部分。比如你將“newspaper”分成“newsp”和“aper”兩個部分。然后你查字典看看有沒有這兩個單詞,如果沒有,那么重新對這個單詞進行分隔,直到找到答案。
8.一個停車位有三分之一時間是空閑的
問題:一個停車位有時候你會發現連續9天都是停了車的,但第10天卻沒有停車,你怎么能判斷?
答案:這是一個棘手的概率問題,所以就需要答案合乎邏輯。在概率問題上,如果一個事件已經發生,它不會對未來起到任何影響,即使已經停了9天,也不能證明第10天就一定是空閑的,所以你需要計算題目中那個三分之二的概率實際中到底有多大幾率。
-
谷歌
+關注
關注
27文章
6142瀏覽量
105110 -
工程師
+關注
關注
59文章
1566瀏覽量
68445
發布評論請先 登錄
相關推薦
評論