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

【LeetCode】每日一题 2024_11_2 使两个整数相等的位更改次数(位运算/模拟)

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:使两个整数相等的位更改次数

代码与解题思路

先读题:

题目要我们把 n 这个数字转换成 k 这个数字,但是只能是二进制位 1 转换成 0

纯模拟的解法:

func minChanges(n int, k int) (ans int) {
    for n > 0 {
        // 选择 n 的 二进制表示 中任意一个值为 1 的位,并将其改为 0
        if n&1 == 1 {
            if k == 0 || k&1 == 0 {
                ans++
            }
        }
        // 假如 k > n,或者出现 n 的位是 0 而 k 的位是 1 的情况,返回 -1
        if k > n || k > 0 && n&1 == 0 && k&1 == 1 {
            return -1
        }
        n >>= 1
        k >>= 1
    }
    return ans
}

位运算的解法:

n&k != k,假如出现有二进制位 n 是 0,k 是 1 的情况, n&k 就不等于 k,可以用来直接判断是否返回 -1

bits.OnesCount 能找到二进制位是 1 的数量,按位异或,相同为 0,相异为 1

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

每天进步一点点,我们明天不见不散~

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。


http://www.kler.cn/a/377849.html

相关文章:

  • 地址踩踏问题
  • 学习threejs,THREE.PlaneGeometry 二维平面几何体
  • 信号仿真高级工程师面试题
  • Docker搭建kafka环境
  • 牛客网 SQL36查找后排序
  • WPF自定义窗口 输入验证不生效
  • OPENAI官方prompt文档解析
  • 基于知识引导提示的因果概念提取(论文复现)
  • linux 系统扩容
  • (二 上)VB 2010 设计初步
  • Apache Hive 通过Docker快速入门
  • 华为OD机试真题-组装最大可靠性设备-2024年OD统一考试(E卷)
  • Linux下安装Redis基本步骤
  • 总结一些高级的SQL技巧
  • 收音机天线的耦合方式
  • 6.1、实验一:静态路由
  • java毕业设计之基于Bootstrap的常州地方旅游管理系统的设计与实现(springboot)
  • 【Android】初识路由框架及ARouter基本使用方法
  • eclipse软件路径报错重启后,项目都不见了!(解决办法)
  • 企业选择裸金属服务器的好处有哪些?
  • UBUNTU查看CPU核心数
  • 精美的美食食谱分享首页
  • 【C++笔记】容器适配器及deque和仿函数
  • 甘肃美食,一抹难以割舍的乡愁
  • 判断是否是变位词
  • 探究Spring中所有的扩展点