经典问题

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

}

相关文章
相关标签/搜索