一道曾經微軟的面試題

2021-06-23 08:50:21 字數 458 閱讀 3092

題目描述:有10億個至多9位**號碼,找出這些**號碼不重複的個數,記憶體之給你256m的空間

分析:這相當於10億個int型整數,每個int佔四個位元組,40億個位元組,也就說儲存這些**號碼需要4g的記憶體空間,所以必須對這些**號碼進行壓縮

解決方法:可以用乙個位來表示這個**號碼是否存在,也就是說需要十億位,1表示有,0表示無,用int來表示這十億位,需要用(十億+32)/32個int型整數來儲存這10億位,那麼需要多少空間呢,需要(十億+32)/32*4個位元組=125m,這樣記憶體就足夠大讓我們遍歷這10億個**號碼了,每個**號碼在十億以內,所以**號碼的大小就表示這個**號碼在十億位中第幾位為1, 找到相對應的int來進行儲存,例如:**號碼123,那麼123/32=3,123%32=27,則這個表示這個**號碼的存在就可以把第3+1個int的第27位表示1

一道微軟面試題

聽說這是一道微軟面試題,今天無意中在網上看到。幾個月前我同學面試時遇到過乙個類似的題目,幾乎是原題。當時在群裡面討論過這個問題,答案不一。也沒有人知道最後的正確答案。下面是原題,帶答案解析。小明和小強都是張老師的學生,張老師的生日是m月n日,2人都知道張老師的生日是下列10組中的一天,張老師把m值告...

一道微軟面試題

每個飛機只有乙個油箱,飛機之間可以相互加油 注意是相互,沒有加油機 一箱油可供一架飛機繞地球飛半圈,問 為使至少一架飛機繞地球一圈回到起飛時的飛機場至少需要出動幾架飛機?所有飛機從同一機場起飛,而且必須安全返回機場,不允許中途降落,中間沒有飛機場 3架飛機共6架次 這道題的關鍵應該是 繞地球飛 假設...

對一道微軟面試題的思考

有100萬個數字 1到9 其中只有1個數字重複2次,如何快速找出該數字。大家討論的很激烈,也給出了很多的演算法。lthyxy同學的演算法是 掃瞄一遍做計數,然後看那個數的計數器是2。程式如下 int num 10 for int i 0 i 1000000 i a i 就是你那些數 num a i ...