首页 > 其他分享 >201.数字范围按位与

201.数字范围按位与

时间:2023-03-15 16:48:04浏览次数:43  
标签:201 right 数字 int long 按位 2147483647 left

数字范围按位与

给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。

示例 1:

输入:left = 5, right = 7
输出:4
示例 2:

输入:left = 0, right = 0
输出:0
示例 3:

输入:left = 1, right = 2147483647
输出:0

提示:

0 <= left <= right <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/bitwise-and-of-numbers-range
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路1:朴素解法

遍历数字范围,逐个相与即可。唯一需要注意的是int的最大值2147483647,right = 2147483647时,int i 会超出数值表示范围。需要定义long long int。left = 2147483647时,i = left + 1会超出范围,需要i = (long long int)left + 1,问题时每次都进行强制类型转换会导致超时,所以将left = 2147483647作为特例。

code

class Solution {
public:
    int rangeBitwiseAnd(int left, int right) {
        
        int ans = left;
        if(left == 2147483647) return 2147483647;

        long long int i;
        for(i = left + 1;i <= right;i++)
        {
            ans = ans & i;
        }

        return ans;
    }
};

解题思路2:位运算

基于两个结论:
结论1:一个数加上1之后一定存在一个高位的数字之后的数字变成相反的
结论2:相反之后相与结果为零,并且只要存在一个零,之后所有的相与的值均为零
基于以上结论,我们可以发现从m不断加一到n的过程中会存在不断的抵消掉一些地位的数字,最后会只剩下n的高位。只需要找到m和n的公共高位即可。时间复杂度O(logn).

code

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        
        int offset = 0;

        while(m != n)
        {
            m = m >>1;
            n = n >>1;
            offset ++;
        }

        return n << offset;
    }
};

标签:201,right,数字,int,long,按位,2147483647,left
From: https://www.cnblogs.com/huangxk23/p/17219071.html

相关文章

  • 【PSIM-2】C模块讲解及数字控制
    【1】学习DLLBlock模块,可以实施一系列输入输出的控制,例如较为复杂的控制算法。这需要编译软件来生成dll文件,然后通过模块来索引文件,最后执行动作。  或者选择一个通用......
  • 20201315《网络对抗技术》Exp1
    目录1逆向及Bof基础实践说明1.1NOP,JNE,JE,JMP,CMP汇编指令的机器码2直接修改程序机器指令,改变程序执行流程3通过构造输入参数,造成BOF攻击,改变程序执行流3.1反汇......
  • 20201306 Ep1 逆向及Bof基础实践
    1逆向及Bof基础实践说明1.1实践目标本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串......
  • 旋转数字的最小数字
    classSolution{public:intfindMin(vector<int>&nums){if(!nums.size())return-1;intn=nums.size()-1;while(n>0&&nums[n]==n......
  • idea2018 下载github项目
    获取github代码地址:idea下载项目:File->new->projectversioncontrol->git  ......
  • 数字猜大小,并统计直到猜对时输入的次数
    packagecom.example.practice;importjava.util.Random;importjava.util.Scanner;publicclassTest10{publicstaticvoidmain(String[]args){R......
  • AI绘画:数字时代的提示工程新兴应用
    在数字时代,人们对于信息和素材的需求日益增长。随着技术的不断发展,AI绘画正逐渐成为一种应对这种需求的新兴技术。特别是在“提示工程”这一领域中,AI绘画可以发挥出更大的......
  • PA 2017 Banany
    $$是夜萧索漏星光,一秋叶打漫天霜。钟响,卷地西风扫鸿芒。$$$$求索那堪路漫长,重心剖树早相忘。清唱,时空阻限又何妨?$$PA-2017Banany考虑点分树。先把点分树建出来再考虑更......
  • 【洛谷】P2414 [NOI2011] 阿狸的打字机(AC自动机+离线询问)
    原题链接题意给定\(n\)个字符串,\(m\)次询问一个字符串\(x\)在另一个字符串\(y\)的出现次数。\(1\leqn,m\leq10^5\)。思路要解决多个字符串的问题,不难想到......
  • BUUCTF-REVERCE-[2019红帽杯]easyRE
    [2019红帽杯]easyRE​ 偶尔还是得花时间在难题上面啊。虽然很麻烦,但吃透之后真的是受益匪浅,比狂刷简单题有效多了。1.破解1一般而言,寻找非随机数会是比较快捷的方式。......