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

【技巧】Leetcode 201. 数字范围按位与【中等】

数字范围按位与

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

示例 1:

输入:left = 5, right = 7
输出:4

解题思路

在一个范围内进行按位与操作时,如果这个范围跨越了多个2的幂次方区间,那么最终的结果中,这些幂次方位上的所有位都将变为0。例如:

对于范围 [5, 7],按位与的结果是 4,因为:
5 的二进制表示是 101
6 的二进制表示是 110
7 的二进制表示是 111
5 & 6 & 7 = 100 (即 只有相同前缀的数字保留了,其他位都是0)

可以通过不断右移操作,找到左端点和右端点的共同前缀(非共同前缀&的结果一定是0),记录右移的次数,最后将共同前缀左移回原来的位置。

**例如:**n 和 m 的二进制及最长前缀如下图所示,后缀 011 累加到 110 必然经过 100。011 和 100 保证了答案中长度为 3 的后缀必然均为 0。
在这里插入图片描述

java实现

public class RangeBitwiseAnd {public int rangeBitwiseAnd(int left, int right) {int shift = 0;// 找到 left 和 right 的共同前缀while (left < right) {left >>= 1;right >>= 1;shift++;}// 将共同前缀左移回去return left << shift;}// 测试用例public static void main(String[] args) {RangeBitwiseAnd solution = new RangeBitwiseAnd();System.out.println(solution.rangeBitwiseAnd(5, 7)); // 期望输出: 4System.out.println(solution.rangeBitwiseAnd(0, 1)); // 期望输出: 0System.out.println(solution.rangeBitwiseAnd(1, 2147483647)); // 期望输出: 0}
}

时间空间复杂度

  • 时间复杂度:O(log n),其中 n 是范围内的最大值。因为在逐步右移,直到 left 等于 right,最多需要进行 log n 次右移操作。

  • 空间复杂度:O(1),只使用了常数级别的额外空间。

相关文章:

  • 定义多个类对象,分别输入和输出各对象中的时间(时:分:秒)
  • Vue82-组件内路由守卫
  • Sourcetree:Git版本控制的最佳伴侣
  • CGFloat转NSString保持原有的精度,末尾不添加0
  • 『大模型笔记』如何让小型语言模型发挥作用!
  • 【odoo】常用的基本视图类型
  • 互联网的盈利模式
  • Kotlin基础——Typeclass
  • three.js 第八节 - gltf加载器、解码器
  • Linux_内核缓冲区
  • 高斯算法的原理及其与常规求和方法的区别
  • 计算机系统基础实训七-MallocLab实验
  • vmware虚拟机安装ubuntu20.04
  • 9、Spring之Bean生命周期~依赖注入(总)
  • python入门基础知识(错误和异常)
  • CentOS 7 防火墙操作
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • npx命令介绍
  • php ci框架整合银盛支付
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Vue 重置组件到初始状态
  • 阿里云应用高可用服务公测发布
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从重复到重用
  • 高度不固定时垂直居中
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 深入 Nginx 之配置篇
  • 写给高年级小学生看的《Bash 指南》
  • 做一名精致的JavaScripter 01:JavaScript简介
  • HanLP分词命名实体提取详解
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​数据结构之初始二叉树(3)
  • #Linux(权限管理)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (2)STL算法之元素计数
  • (pojstep1.3.1)1017(构造法模拟)
  • (TOJ2804)Even? Odd?
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (八十八)VFL语言初步 - 实现布局
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (理论篇)httpmoudle和httphandler一览
  • (六)DockerCompose安装与配置
  • (三)elasticsearch 源码之启动流程分析
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)