经典问题
TopK问题
-
全局排序,取前K个
-
局部排序,只排序K个数,冒泡
-
堆,TopK个数也不排序了,最小堆
-
随机选择 + partition
分治法,每个分支“都要”递归,例如:快速排序,O(n*lg(n))
减治法,“只要”递归一个分支,例如:二分查找O(lg(n)),随机选择O(n)
数1问题(假如是32位的数字)
- 位移法,32次计算;
- n&(n-1),能消除一个1,有多少1就执行多少次,平均16次计算;
- 查表法,1次查表,2.5G内存;所有数字和1的个数组成字典
- 二次查表法,2次查表,32K内存;32位拆成高16位和低16位后使用查表法
n&(n-1):
x = 1011 0000
x-1= 1010 1111
x & (x-1) = 1010 0000
于是,n&(n-1)这个操作,可以起到“消除最后一个1”的功效。.
伪代码:
while(n){
result++;
n&=(n-1); // 每次消除一个1,最终为0
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决