调试中...
调试中...
题目描述
题目描述
题解
题解
提交记录
提交记录
代码
代码
测试用例
测试用例
测试结果
测试结果
中等
相关标签
相关企业
提示

下一个数。给定一个正整数,找出与其二进制表达式中1的个数相同且大小最接近的那两个数(一个略大,一个略小)。

示例 1:

 输入:num = 2(或者0b10)
 输出:[4, 1] 或者([0b100, 0b1])

示例 2:

 输入:num = 1
 输出:[2, -1]

提示:

  1. num 的范围在[1, 2147483647]之间;
  2. 如果找不到前一个或者后一个满足条件的正数,那么输出 -1。
通过次数
11K
提交次数
31K
通过率
35.4%

相关标签

相关企业

提示 1
下一步:从每个蛮力解法开始。

提示 2
下一个:想象一个二进制数,在整个数中分布一串1和0。假设你把一个1翻转成0,把一个0翻转成1。在什么情况下数会更大?在什么情况下数会更小?

提示 3
下一步:如果你将1翻转成0,0翻转成1,假设 0 -> 1位更大,那么它就会变大。你如何使用这个来创建下一个最大的数字(具有相同数量的1)?

提示 4
下一步:你能翻转0到1,创建下一个最大的数字吗?

提示 5
下一步:把0翻转为1将创建一个更大的数字。索引越靠右,数字越大。如果有一个1001这样的数字,那么我们就想翻转最右边的0(创建1011)。但是如果有一个1010这样的数字,我们就不应该翻转最右边的1。

提示 6
下一步:我们应该翻转最右边但非拖尾的0。数字1010会变成1110。完成后,我们需要把1翻转成0让数字尽可能小,但要大于原始数字(1010)。该怎么办?如何缩小数字?

提示 7
下一步:我们可以通过将所有的1移动到翻转位的右侧,并尽可能地向右移动来缩小数字(在这个过程中去掉一个1)。

提示 8
获取前一个:一旦你解决了“获取后一个”,请尝试翻转“获取前一个”的逻辑。

评论 (0)

《程序员面试金典(第 6 版)》独家授权
本书是原谷歌资深面试官的经验之作,帮助了许多想要加入脸书、苹果、谷歌等 IT 名企的求职者拿到 Dream offer。本专题的 100+ 编程面试题是在原书基础上精心挑选出来的,帮助你轻松应战 IT 名企技术面试。
© 2025 领扣网络(上海)有限公司
0 人在线
行 1,列 1
运行和提交代码需要登录
num =
2
Source