程序员面试金典---8
下一个数
思路:
- 求出从最低位的1开始的连续的1的区间
- 将此区间全部变为0,并将区间左侧的那个0变为1
- 将第1步取出的区间右移,直到剩下的1的个数减少一个
- 将第2步和第3步的结果相或
/** * @param {number} num * @return {number[]} */ var findClosedNumbers = function(num) { const nextMax = function(num){ let x = num &-num let y = x + num return (num & ~ y) / x >> 1 | y } if(num === 1) return [2, -1] if(num === 2147483647) return [-1, -1] let max = nextMax(num) let min = ~nextMax(~num) if(max < 0) max = -1 return [max,min] };
整数转换
思路:
n=A^B
,可以得到A
和B
有哪几位不同的,即n
二进制1
的个数,就是A
和B
有几位不同的数量n=n & (n - 1)
可以去掉n
二进制的最右边的一个1
,可以统计1
的数量
/** * @param {number} A * @param {number} B * @return {number} */ var convertInteger = function(A, B) { let n = A^B let count = 0 while (n) { n = n & (n - 1); count++; } return count; };
分类:
力扣-程序员面试金典题目整理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!