前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >2025-03-08:使两个整数相等的位更改次数。用go语言,给定两个正整数 n 和 k。 你可以从 n 的二进制表示中选择任意

2025-03-08:使两个整数相等的位更改次数。用go语言,给定两个正整数 n 和 k。 你可以从 n 的二进制表示中选择任意

作者头像
福大大架构师每日一题
发布2025-03-10 13:38:49
发布2025-03-10 13:38:49
4400
代码可运行
举报
运行总次数:0
代码可运行

2025-03-08:使两个整数相等的位更改次数。用go语言,给定两个正整数 n 和 k。

你可以从 n 的二进制表示中选择任意一个位,如果该位为 1,则可以将其改为 0。

请返回将 n 改为 k 所需的改动次数。如果无法做到,返回 -1。

1 <= n, k <= 1000000。

输入: n = 13, k = 4。

输出: 2。

解释:

最初,n 和 k 的二进制表示分别为 n = (1101)2 和 k = (0100)2,

我们可以改变 n 的第一位和第四位。结果整数为 n = (0100)2 = k。

大体步骤如下:

1.定义函数 minChanges(n int, k int),用于计算使两个整数相等的位更改次数。在给定的正整数 n 和 k 中,通过选择 n 的二进制表示中的任意一位,如果该位为 1,则可以将其改为 0。函数返回将 n 改为 k 所需的改动次数,无法做到返回 -1。

2.在主函数 main 中,初始化两个整数 n 和 k 分别为 13 和 4,然后调用 minChanges 函数计算并输出结果。

3.对于输入 n = 13 和 k = 4:

  • • 将 n 和 k 的二进制表示分别视为 (1101)2 和 (0100)2。
  • • 因为我们可以改变 n 的第一位和第四位,所以可以将 13 改为 4,即 n = (0100)2 = k。
  • • 需要改动的次数为 2。

总的时间复杂度:O(1),因为无论输入的 n 和 k 多大,算法的执行时间都是常数级的。

总的额外空间复杂度:O(1),因为算法只使用了常数级的额外空间。

Go完整代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
package main

import (
    "fmt"
    "math/bits"
)

func minChanges(n int, k int)int {
    if (n & k) == k {
        return bits.OnesCount(uint(n ^ k))
    } else {
        return-1
    }
}

func main() {
    n := 13
    k := 4
    result := minChanges(n, k)
    fmt.Println(result)
}

Python完整代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
# -*-coding:utf-8-*-

def min_changes(n, k):
    # 检查 n 是否可以通过修改将其变为 k
    if (n & k) == k:
        return bin(n ^ k).count('1')  # 计算不同位的个数
    else:
        return -1

if __name__ == "__main__":
    n = 13
    k = 4
    result = min_changes(n, k)
    print(result)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大体步骤如下:
  • Go完整代码如下:
  • Python完整代码如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档