一道某高大上互聯網公司的筆試題分享

聲明:

首先聲明,我沒有參加這次考試(吾老矣),我只是道聽途說,是否真的存在這道試題呢?誰知道呢!在此僅僅是想向你們分享一些知識。html

原題大概描述:

給定一個二維數組,裏面隨機的填寫0和1,求取把上下左右連續(斜線不算相連)的1周邊0的個數。在這裏能夠把由1構成數據當作一個島嶼,求島嶼海岸線的長度,即周邊0的個數。ios

舉個簡單例子:(還有更爲複雜的圖像)面試

好比
0 0 0
0 1 1 0
0 1 0 0 0
0 1 1 1 1 0
0 0 0 0 0
連續向連的1,周邊有多少個0?(加粗的0是答案)
算法

引子:

看過人機博弈,吃子棋遊戲(二)如何算氣的博友,應該瞬間就有思路了吧。其實圍棋的算氣,在沒有眼位的狀況下,就是計算算實心島嶼的海岸線。在有眼位的狀況下,圍棋算氣也是計算空心島嶼內部的海岸線長度和外部海岸線長度。什麼是圍棋的眼位,請百度之,咱們不繼續討論圍棋的眼位了。數組

 

解決思路:

我 並不知道詳細的題目,因此對於此題空心島嶼的內部海岸線長度是否須要特殊處理無從知曉。不過,在算氣的時候檢測是否存在眼位並不難,加標示便可。若是確實 是包含空心的島嶼,即造成眼位的圍棋,咱們能夠進行特殊處理。咱們只要將總氣數扣除內部眼位的氣數就ok了,怎麼扣除是個問題。dom

在這裏,我說個思路,不必定夠好,但能夠解決問題。性能

1.肯定內部海岸線的最小包圍盒(這裏有可能存有外部海岸線,但能夠排除大部分外部海岸線),能夠節省不少運算。優化

2.檢測包圍盒內海岸線點是否能夠抵達包圍盒的曼哈頓距離最短的邊界,若是能夠抵達,且與之相鏈接的海岸線上的點都可抵達,它們都是外部海岸線。spa

3.不然,若是沒法走至包圍盒的此邊界,則證實其被包圍,屬於內部海岸線,且與之相連的點均屬於內部海岸線。指針

4.依據上述方法檢測包圍盒內部的不重複的全部點,便可得出哪些是內部海岸線。

咱們知道這個算法效率不高(配合最小包圍盒,以及連通點性質相同,實際上尋路的次數應該不多),但它是正確的,被包圍的海岸線內部的點,就像困在島嶼裏的小怪物,永遠沒法逃出來。而外部海岸線上的點僅僅會認爲島嶼是個障礙物而已。

這個算法能夠處理任意複雜的圖形,就算山路18彎,外部點也會歷經周折到達海岸線,空心島有好多空心,也不會搞錯內部點or外部點。

針對第二點用深度優先搜索或是Astar算法都可以,咱們目的是找到路就行,而不是找到最短的路。

 

總結:

        我發博文的時候,並無把圍棋中算氣算法抽象成爲一個 1,0筆試題。大膽猜想一下,也許出題人正是看到相關博文,才萌生了出此題的想法。我想在CSDN上應該有一部分人更關注筆試題面試題相關的內容,而忽略了本有實質性內容而不是針對筆試題的文章,但願你們可以從各類博客中提取出抽象的知識,以不變應萬變。

 

若是你有更好的思路,能夠留言討論下。轉載請代表出處

再補充一個例子,好久之前我參加某公司筆試,遇到一題以下,給定一個數組,數組中的數值是隨機的且亂序的,要求把偶數排在數組的前面,奇數排在數組的後面,還但願你的算法時間複雜度儘可能低。可使用C/C++語言做答。

你怎麼看這到題,若是你瞬間就有極好的方法,我得恭喜您,由於幾年前的我確實想了很長時間才寫出了正確但時間複雜度比標準答案略高的代碼,後來閱讀一些資料,說標準答案使用首尾兩個指針解決這個問題。恩,今天我要說的是,標準答案該更新了,或是題目該加以更多限制了。看了代碼你就明白了!

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 int main()
 5 {
 6     vector<int> nums{1,2,3,4,5,6,7,8,9,10};
 7     random_shuffle(nums.begin(),nums.end());
 8     partition(nums.begin(),nums.end(),[](int ele)->bool{return ele%2==0;});
 9     for(auto& ele:nums){cout<<ele<<" ";};
10     cout<<endl;
11 }

僅僅10行代碼,包括一切。僅僅第8行代碼,就完成這道題。哈哈,我不但願出題人看見這篇博客。由於也許他會無德的在題目後面加上一句話禁止使用STL。

而若是你是即將參加筆試的小同志,記得帶上STL攻城利器, 讓守城的人亮瞎雙眼。

有一點請放心,出題人在怎麼優化的代碼,也很難(但仍是有可能,某些很專業化的問題,可是這種問題通常不會是面試題吧)在性能上超過STL。一是出題人的水平怎能和STL編寫者比。二是,C++編譯器更懂得優化STL,而不是你的代碼。

相關文章
相關標籤/搜索