編程珠璣第一章、第二章

來源:互聯網
上載者:User

利用位元影像排序

問題:一個最多包含n個正整數的檔案,每個數都小於n,n = 1000 0000。檔案中的正整數沒有重複的,請按升序排列這些整數。可用記憶體空間只有1MB左右,已耗用時間在10秒左右。

      解決方案:使用一個具有1000萬個位的為序列表示這個檔案中的所有整數。若且唯若整數 i 在檔案中時,第 i 位為1。用C++具體實現的話,可用使用位域bitset來實現。bitset<10000000> my_bitset;

 

找出一個不在檔案中的數

問題:給定一個最多包含40億個隨機排列的32位整數的循序檔,找出一個不在檔案中的32bit表示的整數。

    解決方案:因為32bit可用表示的最大不帶正負號的整數為小43億,所以一定存在至少一個這樣的整數。具體解決方案為,利用二分尋找的思想,通過統計中間點之上和之下的元素個數來探測範圍:或者上面或者下面的範圍具有至多全部範圍的一半元素。

 

向量abcdefgh向左旋轉3個位置

問題:將向量abcdefgh向左旋轉 i=3 個位置。

      解決方案:翻轉演算法。

   1: reverse(0, i-1);    /* cbadefgh */
   2: reverse(i, n-1);    /* cbahgfed */
   3: reverse(0, n-1);    /* defghabc */

      此方法可用通過翻轉左右手來進行示範和理解,十個手指分別代表十個數1~10。

 

找出變位詞

問題:找出字典中的變位詞,如stop和tops。

      解決辦法: 分為3步。第一步,給每個單詞增加一個標識,標識由該單詞的字母排序後組成,這樣,變位詞就具有了相同的標識符。第二步,按照標識符對單詞進行排序。第三步,輸出。如果用C語言實現的話,需要用到一個qsort 函數,類似於C++ STL中的排序演算法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.