FaceBook的三道Python面試真題!肝了半天真的沒做出來!

大家好,我是菜鳥哥!學Python走起!

Facebook作爲全球頂尖的科技公司之一,擁有超過52000名員工。很少能有公司在晉升空間和福利上與Facebook匹敵。能夠進入到Facebook公司,成爲Facebook的一名碼農,是很多人夢寐以求的事情。

秋招季馬上就要到了,我們先拿三道Facebook的python面試真題來練練手,體會一下Facebook的題。反正我是做了半天,沒有全都做出來。

1.將零移動到左側

題目描述:將給出整數列表array中的“0”全部移動到最左側,同時保證其他列表元素的順序不變。

時間複雜度:O(n)空間複雜度:O(1)

解題思路:首先,題目指出空間的複雜度爲O(1),表明需要在原列表中進行修改,因此我們可以利用雙指針的思路來解題。

1).設置read_index和write_index的兩個索引,都指向最後一個元素。2).read_index向前走,如果指向了“0”值,就繼續向前,否則,array[write_index]=array[read_index],同時write_index向前走一步。3).當read_index走到array的頭部時,則將write_index之前(包括write_index)的數值全部賦值爲0。

程序展示:

程序中,根據解題思路的每一個步驟,都有對應的程序答案,從結果中也可以看出,輸出結果正確。問題思考:

如果沒有空間複雜度和時間複雜度的限制,這道題是非常容易的,但是通過添加限制,更能體現出一個筆試者的水平。

2.合併重疊區間

題目描述:題目給出一個區間間隔組成的列表array,每一個間隔代表一個小的區間,列表中的間隔都是按照第一個數字進行排序的。合併這些區間,找出這些區間的並集。

時間複雜度:O(n)。空間複雜度:O(n)。

解題思路:這道題目可以利用線性的掃描算法來進行解決。
1.對於每一個區間間隔,進行逐個的空間疊加,設置列表中的第一個間隔爲輸出間隔。
2.如果下一個間隔的區間和輸出間隔有交集,那麼就更新輸出間隔的最大值。
3.如果下一個間隔的區間和輸出間隔沒有交集,那麼將下一個間隔區間來添加到最終的結果中。程序展示

程序實現的功能如下圖所示:

程序中首先判斷輸入的array長度是否是大於等於2,然後按照我們的解題思路,給出了程序解答。問題思考:
這道題的一個重要點在於按照第一個數值對區間進行排序,當然題目給出的列表是已經排好序的。根據區間的數值判斷,就可以很快的得到解題思路。

3.單詞拆分

題目描述:給定一個輸入的單詞string和一個單詞列表array,判斷string能否拆分爲array中的單詞組合。
時間複雜度:O(2的n次方)
空間複雜度:O(n的平方)

上圖的單詞展示中,applepie可以被拆分爲apple 和pie的單詞組合,applepear則可以被拆分爲apple和pear的組合方式。

解題思路:
這道題可以利用動態規劃的算法思想來進行解決。我們以“applepie”這個單詞爲例,單詞列表array=["apple", "apple", "pie", "pear"]:
1).設置dp = [True, False, False, False, False, False, False, False, False],dp長度爲len("applepie") + 1。
2).由於"apple" in array,所以dp =[True, False, False, False, False, True, False, False, False]。也就是dp[5] = True。
3).從dp[5]開始搜尋,由於pie in array,所以有dp =[True, False, False, False, False, True, False, False, True],也即dp[8] = True。
4).返回最終的dp[-1]的結果,表示的單詞string能否被拆分。

程序展示:

程序中,創造動態規劃的數組,然後通過判斷數組中每一個位置是否爲True,進行下一步的計算,最終輸出dp[-1]的接過來判斷string能否被拆分。

問題思考:這道題的動態規劃思路,可以當作一個跳一跳的小遊戲,從string的初始位置,能否按照array中單詞的順序跳到下一個位置,如果有,說明能夠被拆分,如果沒有,則證明無法被拆分。

總結

通過以上三道Facebook的面試真題分享,可以發現,考察的點都是我們平時刷題學習遇到的知識點,這更提示了我們,需要打好自己的基礎,從容應對筆試。希望找工作的小夥伴,都能夠找到自己心儀的工作!

【菜鳥學Python】累計原創近400篇趣味乾貨(爬蟲,數據分析,算法,面試指南,原創趣味實戰,Python遊戲,機器學習),歡迎一起學Python,交流指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章