面試題實現 (百度的不存在數查詢問題)

2021-08-26 06:51:59 字數 1400 閱讀 7584

這種類似的題很多,今天之所以寫出來,主要是實際體驗一下這麼多資料的情況下,到底速度怎麼樣。如果不考慮空間,其實最簡單的就是利用計數排序的方法進行,時間複雜度為n+m.下面是我的實現:

private const uint nums = 10000000;

private const uint maxnum = 100000000;

private void button2_click(object sender, eventargs e)

timespan thets1 = new timespan(datetime.now.ticks);

//讀取檔案,二進位制比文字格式要快很多,而且空間需求也小。

system.io.filestream thefs = new system.io.filestream("d:\\tempnum.txt", system.io.filemode.open, system.io.fileaccess.read);

system.io.streamreader thebr = new system.io.streamreader(thefs);

uint32 thenum, thetmp;

uint32 theindex = 0;

//計算總共需要的陣列空間,因為每個無符號整數代表32個數,則總共需要n/32+1個無符號整數.

uint32 thearraytop = (maxnum >> 5) + 1;

uint32 thenumbers = new uint32[thearraytop];

uint32 ipos = 0;

try}

catch

finally

//遍歷,並把不存在的數寫入檔案.

system.io.filestream thefs1 = new system.io.filestream("d:\\tempnum1.txt", system.io.filemode.createnew, system.io.fileaccess.write);

system.io.streamwriter bw1 = new system.io.streamwriter(thefs1);

for (uint32 i = 0; i < maxnum; i++)

}bw1.flush();

bw1.close();

thefs1.close();

thefs1.dispose();

timespan thets2 = new timespan(datetime.now.ticks);

this.textbox1.text = thets2.subtract(thets1).seconds.tostring();

}我用二進位制輸入和輸出,對於1億個隨機數的情況下在我的機器上花費的時間是26秒,用文字輸入和輸出,1千萬隨機數用了接近1分鐘。

百度面試題 類似Excel列名的位置查詢問題

原文 序列seq a,b,z,aa,ab az,ba,bb,bz,za,zb,zz,aaa,類似與excel的排列,任意給出乙個字串s a z 由a z字元組成的任意長度字串 請問s是序列seq的第幾個 火龍果 a 1 b 2 z 26 aa 1 26 1 1 27 aaa 1 26 2 1 26 ...

外鏈為王 百度索引不存在的頁面

今天的文章會講到兩個問題,這兩個問題看似無關,或者說可以分為兩篇文章來寫,其實不然,放在一起說便於診斷。很久沒有檢視 日誌了,今天由於研究200 0 0 64 無意中發現乙個奇特的現象,現把 貼出來如下 2010 02 21 04 26 14 w3svc1 ip位址 get w程式設計客棧ww.41...

百度的面試題《卷一》

一題 程式題 所謂ip攻擊是指某個ip在短時間內多次訪問伺服器,導致伺服器崩潰。ip位址是0.0.0.0到255.255.255.255。訪問時間是0.0.0到 23.59.59秒 條件1 現在有n行的資料,每行是一條資訊 n 1000000 2,每行資料是由ip 時間組成,中間由空格連線 如 17...