首页 > 其他分享 >[LeetCode] 3226. Number of Bit Changes to Make Two Integers Equal

[LeetCode] 3226. Number of Bit Changes to Make Two Integers Equal

时间:2024-11-02 08:51:24浏览次数:5  
标签:Integers digit return int Make 3226 equal Output Example

You are given two positive integers n and k.

You can choose any bit in the binary representation of n that is equal to 1 and change it to 0.

Return the number of changes needed to make n equal to k. If it is impossible, return -1.

Example 1:
Input: n = 13, k = 4
Output: 2

Explanation:
Initially, the binary representations of n and k are n = (1101)2 and k = (0100)2.
We can change the first and fourth bits of n. The resulting integer is n = (0100)2 = k.

Example 2:
Input: n = 21, k = 21
Output: 0

Explanation:
n and k are already equal, so no changes are needed.

Example 3:
Input: n = 14, k = 13
Output: -1

Explanation:
It is not possible to make n equal to k.

Constraints:
1 <= n, k <= 106

使两个整数相等的位更改次数。

给你两个正整数 n 和 k。

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

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

思路

这是一道位运算的问题。首先注意,这道题里我们只能改 n 的某个 digit,不能改 k 中的 digit;而且我们只能把 1 改成 0,不能把 0 改成 1。

那么判断是否能改和怎么改呢?因为不能改 k 中的任何 digit,所以我们可以计算一下 n & k,如果n & k != k,则说明 n 中有一些位置上存在 0,而我们是不能改动 0 的,这种 case 我们就直接返回 -1。如果n & k == k,起码说明我们可以改。此时我们可以用各种语言自带的 API 统计一下 n 和 k 分别包含几个 1,然后返回他们的差值即可。

或者我们也可以看 n | k 是否等于 n,如果等于 n,则说明 k 里面不存在多余的 1。通过这个方式我们也可以判断是否可以改动。

复杂度

时间O(1)
空间O(1)

代码

Java实现

class Solution {
    public int minChanges(int n, int k) {
        return (n & k) != k ? -1 : Integer.bitCount(n ^ k);
    }
}
class Solution {
    public int minChanges(int n, int k) {
        return (n | k) != n ? -1 : Integer.bitCount(n ^ k);
    }
}

标签:Integers,digit,return,int,Make,3226,equal,Output,Example
From: https://www.cnblogs.com/cnoodle/p/18521563

相关文章

  • Go 语言 -make函数
    在Go语言中,make是一个内置函数,专门用于分配和初始化slice(切片)、map(映射)和channel(通道)三种数据类型。**make函数不会返回一个指针,而是返回初始化后的数据结构本身的引用**。make函数的用途make的主要作用是为这些引用类型的数据结构分配内存并进行初始化,而不是像new......
  • CMake 生成器表达式---条件表达式和逻辑运算符
    【写在前面】CMake的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在目标属性和生成器表达式上下文中。这些表达式允许你根据不同的平台、配置或编译器来定制构建过程。本文引用的文档链接:cmake生成器表达式(7)—CMake3.26.4Documentation【正文......
  • USB E-Maker用途
    E-Marker是“ElectronicallyMarkedCable”的缩写,是封装在USB-C端口中的芯片。通过这个芯片,可以得到电缆的各种参数,包括功率、数据、视频传输、ID等信息。由于Type-C设备之间的功能差异很大,因此在决策过程中考虑电缆至关重要。例如,如果源和接收设备都需要100W的功率,但电......
  • makefile如何编写?
    什么是makefile?        makefile文件中定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令. makefile带来的好处就是——“......
  • OpenCV(cv::copyMakeBorder())
    目录1.函数定义2.示例代码3.应用场景4.注意事项cv::copyMakeBorder()是OpenCV中用于给图像添加边框的函数,可以将指定宽度和类型的边框添加到图像的四周。这种操作在图像处理和计算机视觉任务中非常常见,比如在卷积运算中,通过填充边框来避免边界效应影响结果。1.函数......
  • CMake学习-0
    #CMakeList.txt:Sample01的CMake项目,在此处包括源代码并定义#项目特定的逻辑。#cmake_minimum_required(VERSION3.8)#如果支持,请为MSVC编译器启用热重载。if(POLICYCMP0141)cmake_policy(SETCMP0141NEW)set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT"$<IF......
  • QT creator中cmake管理项目,如何引入外部库(引入Eigen库为例)
    在Eigen的官网下载压缩包[点我进入]解压到当前项目的根目录(当然你也可以自己选择目录)在当前项目的CMakeLists.txt任意位置加入这句话include_directories(${CMAKE_SOURCE_DIR}/eigen)这时候就是测试是否引入成功,在main.cpp中加入#include<Eigen/Dense>,鼠标悬停如果出现路......
  • 【Linux学习】(7)项目自动化构建工具make/Makefile
    Linux项目自动化构建工具-make/Makefile1.背景介绍会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文......
  • Linux笔记---Makefile的简单用法
    1.什么是MakefileMakefile是一种用于自动化构建和管理项目的工具,特别是在软件开发中非常常见。它包含了一系列规则(rules)和指令,描述了如何编译和链接源代码文件,以及生成最终的可执行文件或库文件。简单来说,在系统中存在一个叫做make的命令,该命令被使用之后,会在当前目录下......