首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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完整代码如下:

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完整代码如下:

# -*-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)

在这里插入图片描述

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Oy3P5EJpQIQCiRN5YQDiimvQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券