經典演算法面試題

2021-07-29 17:51:27 字數 1235 閱讀 8409

1、說是有乙個文字檔案,大約有一萬行,每行乙個詞,要求統計出其中最頻繁出現的前十個詞。

先用雜湊,統計每個詞出現的次數,然後用在n個數中找出前k大個數的方法找出出現次數最多的前10個詞。

2、如題1,但是這次檔案特別大,沒有辦法一次讀入記憶體。

1) 直接排序,寫檔案時,同時寫入字串及其出現次數。

2) 可以用雜湊,比如先根據字串的第乙個字元將字串換分為多個區域,每個區域的字串寫到乙個檔案內,然後再用雜湊+堆統計每個區域內前10個頻率最高的字串,最後求出所有字串中前10個頻率最高的字串。

3、如何列印如下的螺旋佇列

21 22 。。。。

20 7 8 9 10

19 6 1 2 11

18 5 4 3 12

17 16 15 14 13

#include

#define max(a,b) ((a)<(b)?(b):(a))

#define abs(a) ((a)>0?(a):-(a))

int foo(int

x, int

y)int main()

return

0;}

0 層規定為中間的那個 1,第 1 層為 2 到 9,第 2 層為 10 到 25,……好像看出一點名堂來了?注意到 1、9、25、……不就是平方數嗎?而且是連續奇數(1、3、5、……)的平方數。這些數還跟層數相關,推算一下就可以知道第 t 層之內一共有 (2t-1)^2 個數,因而第 t 層會從 [(2t-1)^2] + 1 開始繼續往外螺旋。給定座標 (x,y),如何知道該點處於第幾層?so easy,層數 t = max(|x|,|y|)。

東|右:x == t,佇列增長方向和 y 軸一致,正東方向(y = 0)數值為 (2t-1)^2 + t,所以 v = (2t-1)^2 + t + y

南|下:y == t,佇列增長方向和 x 軸相反,正南方向(x = 0)數值為 (2t-1)^2 + 3t,所以 v = (2t-1)^2 + 3t - x

西|左:x == -t,佇列增長方向和 y 軸相反,正西方向(y = 0)數值為 (2t-1)^2 + 5t,所以 v = (2t-1)^2 + 5t - y

北|上:y == -t,佇列增長方向和 x 軸一致,正北方向(x = 0)數值為 (2t-1)^2 + 7t,所以 v = (2t-1)^2 + 7t + x

經典演算法面試題

維護乙個1000個節點的小頂堆。時間複雜度o nlogk 具體步驟 1 將k個陣列的第乙個元素取出來,維護乙個小頂堆。2 彈出堆頂元素存入結果陣列中,並把該元素所在陣列的下乙個元素取出來壓入隊中。3 調整堆的結構,使其滿足小頂堆的定義。4 重複 2 3 直到合併完成。動態規劃 dp n m 表示n被...

C 經典演算法面試題

static intsum int x static void sort int nums console.writeline nums i 字典的定義 必須包含名空間system.collection.generic dictionary裡面的每乙個元素都是乙個鍵值對 由二個元素組成 鍵和值 鍵必...

經典面試題

1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...