网站首页 > 文章精选 正文
2025-06-18:仅含置位位的最小整数。用go语言,给定一个正整数 n,求一个不小于 n 的最小整数 x,且该整数的二进制表示中,1 的个数与给定的“置位”数量相同。换句话说,x 的二进制中有指定数量的位是 1,且 x ≥ n,找到满足条件的最小的这样的 x。
1 <= n <= 1000。
输入: n = 5。
输出: 7。
解释:
7 的二进制表示是 "111"。
题目来自力扣3370。
解决步骤(假设题目是求最小的全 1数 ≥ n)
1. 计算 n 的二进制位数:
o 使用 bits.Len(uint(n)) 得到 n 的二进制表示的长度(即最高有效位的位数)。
o 例如,n = 5(101),bits.Len(5) 返回 3。
2. 构造全 1 的数:
o 全 1 的数的二进制表示是 k 个 1,其值为 2^k - 1。
o 例如,k = 3,2^3 - 1 = 7(111)。
3. 检查是否满足 ≥ n:
o 如果 2^k - 1 ≥ n,则直接返回 2^k - 1。
o 否则,需要增加位数 k 并重新构造全 1 的数。
o 例如,n = 8:
o bits.Len(8) 返回 4(8 是 1000)。
o 2^4 - 1 = 15(1111),15 ≥ 8,返回 15。
o 例如,n = 5:
o bits.Len(5) 返回 3。
o 2^3 - 1 = 7,7 ≥ 5,返回 7。
时间复杂度和空间复杂度
o 时间复杂度:
- o bits.Len(uint(n)) 的时间复杂度是 O(1)(通常是通过硬件指令或快速位操作实现)。
- o 构造 1 << k - 1 也是 O(1)。
- o 因此,总时间复杂度是 O(1)。
o 空间复杂度:
- o 只使用了常数级别的额外空间(几个变量)。
- o 因此,总空间复杂度是 O(1)。
总结
o 题目可能是求“不小于 n 的最小全 1 数”。
o 代码通过 bits.Len 找到 n 的二进制位数 k,然后返回 (1 << k) - 1。
o 时间复杂度和空间复杂度均为 O(1)。
Go完整代码如下:
package main
import (
"fmt"
"math/bits"
)
func smallestNumber(n int)int {
return1<<bits.Len(uint(n)) - 1
}
func main() {
n := 5
fmt.Println(smallestNumber(n))
}
Python完整代码如下:
# -*-coding:utf-8-*-
def smallest_number(n: int) -> int:
# bits_len = n的二进制长度
bits_len = n.bit_length()
return (1 << bits_len) - 1
if __name__ == "__main__":
n = 5
print(smallest_number(n))
·
我们相信Go语言和算法为普通开发者提供了困境的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的Go语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。
欢迎关注“福大规模架构师每日一题”,让 Go 语言和算法助力您的职业发展
·
猜你喜欢
- 2025-07-14 Go并发编程之WaitGroup(go语言 并发)
- 2025-07-14 golang企业微信告警(企业微信告警推送)
- 2025-07-14 2.8 Go语言中的for循环,break和continue
- 2025-07-14 Go语言Context包:最常用包之一的使用指南
- 2025-07-14 Go语言零到一:动态数组——切片(go语言的切片)
- 2025-07-14 2025-06-26:转换数组。用go语言,给你一个整数数组 nums,它被视
- 2025-07-14 go sync.Pool简介(go system)
- 2025-07-14 2025-07-13:统计特殊子序列的数目。用go语言,给定一个只包含正
- 2025-07-14 Go语言数据库编程:GORM 的基本使用
- 2025-07-14 2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)