構造最大數;及熟悉的陌生人分析
今日面試題:構造最大數
給定只包含正數的陣列,給出一個方法,將陣列中的數拼接起來,得到的數,是最大的。
例如:
[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釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 相伴一生;及構造最大數分析
- 熟悉的陌生人;及又見Google搜尋之星分析Go
- Swift中熟悉的陌生人:Protocol(一)SwiftProtocol
- 說說Flutter中最熟悉的陌生人 —— KeyFlutter
- 找最大數;及序列生成分析
- 合併總數;及相差最大分析
- 周長最長;及找到最大數分析
- 線性時間構造最大堆
- 相差最大;及逆序分析
- Google賽馬;及最大矩形分析Go
- 【lombok】@NoArgsConstructor/@RequirArgsConstructor/@AllArgsConstructor - 生成無參構造器,指定引數構造器或包含所有引數的構造器LombokStructUI
- C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造C++函式
- 分詞問題;及最大乘積分析分詞
- 突破!中小製造企業數字化轉型困境分析及對策
- 缺失的數字;及找數字分析
- c語言 構造素數表C語言
- 2466. 統計構造好字串的方案數字串
- InnoDB鎖結構個數最大限制
- C++:String物件的構造及深拷貝C++物件
- 排序--最大堆構造和堆排序(單步檢視過程)排序
- 找數字續;及缺失的數字分析
- 最大乘積;及最新版本分析
- laravel中的$request物件構造及請求生命週期Laravel物件
- 構造 LL(1) 分析表的步驟與例題解析
- 用分析函式分析每行裡面列值重複的列的最大個數函式
- Shadow DOM 內部構造及如何構建獨立元件元件
- 演算法設計與分析:求兩個自然數的最大公約數演算法
- C/C++中的new/delete、構造/解構函式、dynamic_cast分析C++delete函式AST
- 十七、物件的構造物件
- Java--構造器和構造方法Java構造方法
- 重排陣列;及消失的數字分析陣列
- 用數學方法分析哪類遊戲中的AI難度最大遊戲AI
- 格點數目;及兄弟數字分析
- 數對數目;及LIS問題分析
- effective java 第2條:遇到多個構造器引數時要考慮用構造器Java
- Jboss的最大連線數
- 小於n的最大數
- 構造方法構造方法