經典問題

TopK問題

  • 全局排序,取前K個數組

  • 局部排序,只排序K個數,冒泡spa

  • ,TopK個數也不排序了,最小堆排序

  • 隨機選擇 + partition 遞歸

分治法,每一個分支「都要」遞歸,例如:快速排序,O(n*lg(n))內存

減治法,「只要」遞歸一個分支,例如:二分查找O(lg(n)),隨機選擇O(n)it

數1問題(假如是32位的數字)

  • 位移法,32次計算;
  • n&(n-1),能消除一個1,有多少1就執行多少次,平均16次計算;
  • 查表法,1次查表,2.5G內存;全部數字和1的個數組成字典
  • 二次查表法,2次查表,32K內存;32位拆成高16位和低16位後使用查表法

n&(n-1)io

           x = 1011 0000class

         x-1= 1010 1111di

x & (x-1) = 1010 0000while

因而,n&(n-1)這個操做,能夠起到「消除最後一個1」的功效。.

僞代碼

while(n){

   result++;

   n&=(n-1); // 每次消除一個1,最終爲0

}

相關文章
相關標籤/搜索