1. 程式人生 > >今日頭條&58轉轉筆試

今日頭條&58轉轉筆試

分鐘 idea 最小 位置 比較 ref print font com

昨天參加今日頭條和58轉轉的筆試,因為時間上有沖突,所以主要選擇參加頭條的筆試。

先說頭條:

頭條的題型:

一道改錯題

三道編程題

一道設計題

感受:

做題目的的時候還是有點緊張的,因為突然遇到題目需要思考很長時間,而且不確定是否正確時,真的是著急。

做完頭條筆試感覺真是好大差距,有大神三道編程全部AC,而我三道編程只能50%,0,0;

改錯題一上來有點懵,半個多小時,最後還不知道改的對不對。

設計題基本是用一個套路來回答的,也不確定,但肯定不完善。

被虐的體無完膚。

下面主要記一下編程題:

第一題有思路,但是不知道哪裏出的問題,最後只有50%通過。後來了解到,可能是輸入輸出使用cin/cout所致,在數據量比較大的時候使用scanf和printf效率會比較高。

但是第一題花費了過長的時間,大概接近50分鐘。真的需要多寫代碼,熟練基本容器的使用。不然在寫的時候,就會發現自己的代碼上真的還是存在很大問題的。容器,叠代器。

第二題,因為只剩下十幾分鐘,剛開始題目都沒有理解透。最後才讀明白,可以用線段樹。

第三題,直接沒有時間去看。

下面貼一下大神的思路:

作者:Ck0123 鏈接:https://www.nowcoder.com/discuss/33986 來源:牛客網

(1)第一題:給一個二維平面,而且橫縱坐標都不會重復(簡化了排序),要求“不存在左上方還有點”的點集。因為數據量最大是50W,所以基本上用是O(nlogn)的方法解決。 首先按x坐標排個序(因為y不重復所以不用管),然後從後往前(此時保證當前點的x是比後面的x要小的),記錄一個當前最大的Y,如果當前這個位置的y比Y還要大,那麽明顯這個位置的“左上方”不可能有點了。問題解決。 (2)第二題:一段長度是50W的數列,找一段區間,使得:這段區間裏的最小值*這段區間值的總和 最大。換句話說就是:min*total是全部區間裏最大的。 其實這樣的題方法肯定有很多,但是突破口是一定的:從這個最小值入手。枚舉這個最小值,然後問題就變成“怎麽找這個數前面(和後面)第一個比它小的數的位置”,這個線段樹可以解決。好像倍增也可以。當然還有別的方法只要是O(nlogn)肯定都是可以的。 (3)第三題:其實就是一個模擬不過是帶優先隊列的模擬,因為C++、Java都是自帶優先隊列的,所以問題不大。將程序員(因為哪個程序員做其實不重要)按目前手頭上的idea實現結束時間加入一個優先隊列(按結束時間來排序的),然後枚舉當前的時間(從0到10000吧,假設),如果到了idea的“提出時間”,將它加入這個hr單獨的優先隊列裏(idea要按照題目要求先排序),每個時間點都查詢有沒有空的程序員?有沒有idea需要執行?按照這種思路大概就可以了。<!--說起來容易做起來難-->

總結:對於容器的使用要很重視,經常遇到同一類型需要用到pair容器的題目;

要提高編碼的速度和質量,對於第一個題目,因為粗心可能浪費了有二十分鐘調試。思路沒有問題,都花在改代碼上。。。

面對這樣的編程筆試題目,一般,我覺得一道題目花費時間不應該超過25分鐘。所以,當你在一道有思路的題目上花費超過半小時,那就說明你編碼功底不夠。

另外,面對題目吐過沒有思路,說明對與常見算法與題目熟練度不夠,需要多加練習。

實現代碼,陸續補上!

下面再說58轉轉。

今日頭條&58轉轉筆試