2026-09-09:恰好一对连续置位。用go语言,给定一个整数,检查它的二进制形式里是否正好有一处“11”这样的连续两位都是1,并且不能有其他相邻的1对,也不能有多于一对。满足条件则返回真,否则返回假。
0 <= n <= 100000。
输入: n = 6。
输出: true。
解释:
6 的二进制表示为 110 。
恰好存在一对相邻的置位("11")。因此,答案为 true 。
题目来自力扣3950。
第一步:构造标记“相邻 1 对”的掩码m
1. 对原整数
n进行右移一位操作,得到n >> 1。
右移后,原来二进制中第i+1位的值,移动到了第i位的位置上。2. 将原整数
n与n >> 1按位相与,得到m = n & (n >> 1)。3. 按位与的结果中,第
i位为1当且仅当:也就是说,
m的每一个1位,都对应原二进制中一个连续的“11”对。
因此,m中1的个数,就等于原二进制中相邻置位对的数量。
• 原整数
n的第i位是1;• 原整数
n的第i+1位也是1。
m中是否恰好只有一个1题目要求正好有一对连续置位,也就是要求m中1的个数必须恰好为1。
代码中的判断方式是:
• 首先检查
m > 0,保证至少存在一个相邻1对;• 然后检查
m & (m - 1) == 0。
m & (m - 1) == 0是判断一个数是否为2的幂的经典方法。
当m > 0时,该条件成立,意味着m的二进制表示中有且只有一个1。
如果m中有两个或更多个1,说明原二进制中存在多处相邻置位对,不符合要求,返回false。
如果m == 0,说明不存在相邻置位对,也返回false。
第三步:返回结果
只有当:
•
m > 0:至少有一处连续置位;•
m & (m - 1) == 0:连续置位对的数量恰好为一处;
同时满足时,才返回true,否则返回false。
举例说明
以输入n = 6为例:
•
6的二进制是110。•
n >> 1得到3,二进制是011。•
m = 110 & 011 = 010,二进制中只有一个1。•
m > 0成立,且m & (m - 1) = 2 & 1 = 0成立。• 所以返回
true。
再比如n = 7,二进制是111:
•
n >> 1是3,二进制011。•
m = 111 & 011 = 011,有两个1,说明存在两处相邻置位对。•
m & (m - 1) = 3 & 2 = 2 != 0,返回false。
整个过程中只使用了固定次数的位运算和比较操作,与输入整数的大小无关。
因此时间复杂度为:
O(1)
额外空间复杂度
算法只使用了有限的几个整型变量,没有使用数组、切片、递归栈等额外数据结构。
因此额外空间复杂度为:
O(1)
Go完整代码如下:
package main
import "fmt"
func consecutiveSetBits(n int) bool {
m := n & (n >> 1) // 所有相邻比特位的 &
return m > 0 && m&(m-1) == 0 // m 是否恰好有一个 1
}func main() {
n := 6
result := consecutiveSetBits(n)
fmt.Println(result)
}
Python完整代码如下:
# -*-coding:utf-8-*-
def consecutive_set_bits(n: int) -> bool:
m = n & (n >> 1) # 所有相邻位都为 1 的位置
return m > 0 and (m & (m - 1)) == 0 # m 是否恰好只有一个 1if __name__ == "__main__":
n = 6
print(consecutive_set_bits(n))
C++完整代码如下:
bool consecutiveSetBits(int n) {
int m = n & (n >> 1); // 所有相邻位都为1的位置
return m > 0 && (m & (m - 1)) == 0; // m 是否恰好只有一个1
}int main() {
int n = 6;
bool result = consecutiveSetBits(n);
std::cout << std::boolalpha << result << std::endl;
return 0;
}
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.