careercup 高等難度 18 5

2021-09-22 19:12:29 字數 661 閱讀 7352

18.5 有個內含單詞的超大文字檔案,給定任意兩個單詞,找出在這個檔案中這兩個單詞的最短距離(也即相隔幾個單詞)。有辦法在o(1)時間裡完成搜尋操作嗎?解法的空間複雜度如何?

解法1:我們假設單詞word1和word2誰在前誰在後無關緊要。要解決此題,我們需要遍歷一次這個檔案。在遍歷期間,我們會記下最後看見word1和word2的地方,並把它們的位置存入lastposword1和lastposword2中。碰到word1時,就拿他跟lastposword2比較,如有必要則更新min,然後更新lastposword1.每碰到word2時,我們也執行同樣的操作。遍歷結束後,就可以得到最短距離。

實現演算法:

int shortestdist(string text, int n, string word1, string

word2)

else

if(text[pos] ==word2)

}return

min;

}

如果上述**要重複呼叫(查詢其他單詞對的最短距離),可以構造乙個雜湊表,記錄每個單詞及其出現的位置。然後,我們只需找到lista和listb中(算術)差值最小的那兩個值。

hash_map> lista;

hash_map> listb;

lista:

listb:

careercup 高等難度 18 2

18.2 編寫乙個方法,洗一副牌。要求做到完美洗牌,換言之,這幅牌52!種排列組合出現的概率相同。假設給定乙個完美的隨機發生器。解法 假定有個陣列,含有n個元素,類似如下 1 2 3 4 5 利用簡單構造法,我們不妨先問自己,假定有個方法shuffle 對n 1個元素有效,我們可以用它來打亂n個元素...

careercup 高等難度 18 6

18.6 設計乙個演算法,給定10億個數字,找出最小的100萬個數字。假定計算機記憶體足以容納全部10億個數字。解法 方法1 排序 按公升序排序所有的元素,然後取出前100萬個數,時間複雜度為o nlog n 方法2 大頂堆 我們可以使用大頂堆來解題。首先,為前100萬個數字建立乙個大頂堆 然後,遍...

careercup 中等難度 17 7

17.7 給定乙個整數,列印該整數的英文描述 例如 one thousand,two hundred thirty four 解法 舉個例子,在轉換19 323 984時,我們可以考慮分段處理,沒三位轉換一次,並在適當的地方插入 thousand 千 和 million 百萬 也即,convert ...