当前位置: 首页 > news >正文

LeetCode 3226. 使两个整数相等的位更改次数

. - 力扣(LeetCode)

题目

给你两个正整数 n 和 k。你可以选择 n 的 二进制表示 中任意一个值为 1 的位,并将其改为 0。

返回使得 n 等于 k 所需要的更改次数。如果无法实现,返回 -1。

  • 示例 1:
    • 输入: n = 13, k = 4
    • 输出: 2
    • 解释:最初,n 和 k 的二进制表示分别为 n = (1101)2 和 k = (0100)2,我们可以改变 n 的第一位和第四位。结果整数为 n = (0100)2 = k
  • 示例 2:
    • 输入: n = 21, k = 21
    • 输出: 0
    • 解释:n 和 k 已经相等,因此不需要更改。
  • 示例 3:
    • 输入: n = 14, k = 13
    • 输出: -1
    • 解释:无法使 n 等于 k

解题方案

1. 逐位遍历

依次取n和k最后一位,进行比较

  • 如果last_n == last_k, 则不需要修改,继续遍历
  • 如果lask_n != last_k:
    • 如果last_n == 1, last_k == 0, 则需要改变操作,操作数+1
    • 如果last_n == 0, last_k == 1, 则无法通过指定操作使n变成k, 直接返回-1

class Solution:def minChanges(self, n: int, k: int) -> int:if n < k:return -1if n == k:return 0mod = 0while k > 0 or n > 0:last_n = n & 1 # 取n的最后一位last_k = k & 1 # 取k的最后一位n = n >> 1k = k >> 1if last_n == last_k:print(last_n, last_k, n, k, mod)continueelif last_k == 1:return - 1else:mod += 1 print(last_n, last_k, n, k, mod)return mod

分析复杂度

  • 时间复杂度是n和k位数的最大值:O(log \ max(n, k)) 

  • 空间复杂度是O(1)

2. 位操作

如果把n和k的二进制为1的位分别看做一个集合,那么k应该是n的一个子集。

1. 按位或操作,如果操作结果等于k,则n可以通过修改某些位置上1为0得到k;反之则不能,直接返回-1.

2. 已知n可以通过修改某些位置上1为0得到k,接下来进行异或操作(n和k不同的位为1,即需要修改的位为1),统计操作结果中1的位数即可

class Solution:def minChanges(self, n: int, k: int) -> int:return (n ^ k).bit_count() if (n & k) == k else -1

分析复杂度

  • 时间复杂度 O(1)
  • 空间复杂度 O(1) 

 

 

http://www.lryc.cn/news/475476.html

相关文章:

  • 面试经典 150 题:189、383
  • Python模拟真人动态生成鼠标滑动路径
  • 如何压缩pdf文件的大小?5分钟压缩pdf的方法推荐
  • 【SQL】[2BP01] ERROR: cannot drop table course because other objects depend on it
  • gbase8s之spring框架用druid中间件报语法错误
  • 【网络安全】|nessus使用
  • CSRA2的LINUX操作系统24年11月2日上午上课笔记
  • 通过分解质因数求若干个数的最小公倍数
  • 数据库三范式(1NF、2NF、3NF)
  • C语言_数据结构_顺序表
  • Llama 3.2 Vision Molmo:多模态开源生态系统基础
  • 【数据结构与算法】第6课—数据结构之栈
  • 开源全站第一个Nextron(NextJS+electron)项目--NextTalk:一款集成chatgpt的实时聊天工具
  • 多样化的编程模型:并发与并行策略
  • npm入门教程2:npm历史
  • Cuebric:用AI重新定义3D创作的未来
  • 前端react常见面试题目(basic)
  • 机器人技术基础(4章逆运动解算和雅克比矩阵)
  • OpenGL入门002——顶点着色器和片段着色器
  • [数组排序] LCR 164. 破解闯关密码
  • 05 Django 框架模型介绍(一)
  • 【简道云 -注册/登录安全分析报告】
  • 【C++题解】1970. 判断是什么字符
  • Python自动化操作Word文档详解
  • 常用滤波算法(二)-中位值滤波法
  • HCIP--以太网交换安全(总实验)
  • C语言 | Leetcode C语言题解之第519题随机翻转矩阵
  • 《机器人SLAM导航核心技术与实战》第1季:第10章_其他SLAM系统
  • 《双指针篇》---快乐数
  • U盘引导丢失问题的处理办法