本文介绍: 给你两个整数 leftright表示区间 [left, right] ,返回区间内所有数字 按位与 的结果包含 leftright 端点)。(2)在区间leftright中,因为是连续的整数,所以一定在leftright的后面的n位上均存在0,根据(1)可知后面的n位按位&的结果都是0.现在就可以代码部分了,其中shift表示就是n。(1)假设区间中有w个数字,那么n个数字在第k位只要有一个数字不是1那么按位&的结果一定是0。本题一个思维上的方法,不涉及数据结构和具体的算法

题目

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

在这里插入图片描述

题解

本题一个思维上的方法,不涉及数据结构和具体的算法
首先如果是暴力解法遍历区间内的所有数字是超过时间限制的。

首先有两个规则
(1)假设区间中有w个数字,那么n个数字在第k位只要有一个数字不是1那么按位&的结果一定是0
(2)在区间left到right中,因为是连续的整数,所以一定在left和right的后面的n位上均存在0,根据(1)可知后面的n位按位&的结果都是0.
综上我们需要找到n到底是几,以及left和right公共前缀可以了。现在就可以代码部分了,其中shift表示的就是n。

代码

class Solution {
public:
    int rangeBitwiseAnd(int left, int right) {
        int shift = 0;
        while(left!=right){
            left = left >> 1;
            right = right >> 1;
            shift+= 1;
        }
        return left << shift;
    }
};

原文地址:https://blog.csdn.net/qq_40742298/article/details/134769741

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_39792.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注