構造最大數;及熟悉的陌生人分析

紫鳳發表於2013-07-23

今日面試題:構造最大數

給定只包含正數的陣列,給出一個方法,將陣列中的數拼接起來,得到的數,是最大的。

例如:

[4, 94, 9, 14, 1] 拼接之後,所得最大數為:9944141

===============================

熟悉的陌生人分析

原題

大家都知道facebook使用者都是雙向的好友,a是b的好友,那麼b一定是a的好友,現在給定一個使用者列表,其中有些使用者是好友,有些不是,請判斷,這些使用者是否可以劃分為兩組,並且每組內的使用者,互相都不是好友。如果能,請給出這個劃分。

例子1: 使用者:{1, 2, 3} 好友關係:1-2, 2-3 劃分:{1,3} {2}

例子2: 使用者{1,2,3,4} 好友關係:1-2, 2-3, 3-4,4-1 劃分:{1, 3}{2, 4}

分析

有很多面試題比較直接,看到題目,面試者很自然的就想到用什麼方法,這時候,往往面試官要的是bug-free的code;還有一些問題,不那麼直接,那就是考察,應試者的分析問題、分解問題的能力。往往是一個相對複雜的問題,分解為我們見過的、相對簡單的問題;還有一類問題,從實際當中來,這就需要有建模的能力,也可以說是把問題抽象出來的能力,然後才是分解成小的問題等。這樣的題目,能夠全面的考察應試者的能力。例如今天的面試題。

今天的面試題來自facebook的實際問題。像在我們國內,有很多同學在做新浪微博的資料探勘,好友推薦、關係預測、圈子發現、轉發分析、影響力分析等等,這些都是很實際、很有用的問題,每一個問題,都可以作為一個值得深入探討的面試題。

相對而言,今天的面試題目比較簡單。因為建模的部分,已經在題目中給出了。稍想一下,圖分割的問題。facebook的好友關係是雙向的,意味著是無向圖(新浪微博,twitter都是有向圖)。然後,要把圖劃分為兩組,這兩組滿足什麼條件呢?組內沒有邊,組間有邊。這顯然就是一個二分圖。

那問題很明顯了,就是facebook好友關係構成的圖,是否是一個二分圖?如果是,請找到這個劃分。就是二分圖判斷+找到一個劃分即可。

根據二分圖的特性,一條邊上的兩個點,肯定是屬於不同的組。如果它們出現在同一個組中,肯定就不是二分圖了。怎麼判斷,一條邊上的兩個點,分屬於不同的組呢?我們需要遍歷圖,如果找到一條邊,兩個節點,都在同一組,則不是二分圖;如果圖遍歷完成之後,沒有找到這樣的邊,則是二分圖。我們在遍歷的過程中,我們需要區分,一條邊的兩個節點分屬於不同的組,這裡我們用到了染色法。核心思想如下:

從某一個點開始,將這個節點染色為白色,並且開始廣度優先遍歷,找到與其相鄰的節點,如果是二分圖,相鄰節點的顏色都應該不同。如果是黑色,則不變;如果是無色,則染成黑色;如果是白色,也就是同色,程式退出。當圖遍歷完畢時,沒有相鄰節點同色的,則是二分圖,標記為白色和黑色的兩組就是一個劃分。

來看兩個例子,第一個圖中的例子2:

步驟 遍歷節點 相鄰節點 佇列
1 1:白 2:黑,4:黑 2,4
2 2:黑 1:白,3:白 4,3
3 4:黑 1:白,3:白 3
4 3:白 2:黑,4:黑

佇列空,結束遍歷。找到劃分{1,3}白{2,4}黑。

再看一個不是二分圖的例子: 使用者{1,2,3,4} 關係:1-2,1-3,1-4,2-3,3-4.

判斷步驟如下:

步驟 遍歷節點 相鄰節點 佇列
1 1:白 2:黑,3:黑,4:黑 2,3,4
2 2:黑 1:白,3:白 3,4

發現3矛盾了,則上面的關係,不夠成二分圖。

【分析完畢】

本文來自微信:待字閨中,2013-07-19釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。

相關文章