leetcode-201:数字范围按位与

别再手动写JSON了!用Node-RED OPC UA节点5分钟搞定楼宇温湿度数据采集 本文介绍了如何利用Node-RED和OPC UA节点快速实现楼宇温湿度数据的自动化采集与JSON格式转换。通过可视化工具Node-RED,开发者无需编写复杂代码,5分钟内即可完成从传感器到数据输出的全流程配置,大幅提升智慧楼宇和工业物联网项目的实施效率。 阅读详情

leetcode-201:数字范围按位与

链接

数字范围按位与

分析

首先我们先查看数据范围 [0-231-1],数据范围很大,这个时候我们可以初步判定时间复杂度是O(1) or O(logn)级别

logn级别的复杂度一般是二分,嗯…想了一下,没什么好的思路,就从O(1)开始考虑吧.

既然答案是二进制与,那么我们不妨从二进制角度来考虑.

将left和right转化为二进制之后,突然发现了一个显而易见的规律,如果l和r的二进制位不一样,那么结果一定是0,为什么呢?

对于任意一组二进制位不同的left和right,转化为二进制后,取一个最高位为1,其他位为0的位于left和right之间的数,这三个数相与,结果一定是0,0和left和right之间的其他数据取与也一定是0,这样,我们就解决了二进位不同的问题,下来只需要解决二进制位相同的问题了.

顺着刚才的思路考虑,只有变化的二进制位会受到区间的影响,那么答案一定和不再变化区间的二进制位有关,所以我们要保证当前二进制位的值大于l和r差值即可.然后对这部分取与,就是答案.


code

class Solution {
public:
    int rangeBitwiseAnd(int left, int right) {
        // 记录差值
        int x = right - left;
        // 结果
        int res = 0;
        // 用字符串记录left和right二进制值
        string a, b;

        // 计算left二进制值
        while (left) {
            int x = left % 2;
            a += (x + '0');
            left /= 2;
        }

        // 计算right二进制值
        while (right) {
            int x = right % 2;
            b += (x + '0');
            right /= 2;
        }

        // 二进制位不相等直接返回0
        if (a.size() != b.size()) return 0;

        for (int i = 0; i < a.size(); i ++) {
            // 计算答案
            if ((1 << i) > x and a[i] == '1' and b[i] == '1') res += 1 << i;
        }

        return res;
    }
};
Android 12高通thermal-engine调试实战:如何快速开启debug日志并解决CPU降频问题 本文详细介绍了Android 12高通thermal-engine的调试实战,包括如何快速开启debug日志、解读关键日志信息以及解决CPU降频问题。通过优化配置文件和调整温控策略,开发者可以有效提升设备性能,避免因温度管理导致的性能瓶颈。 阅读详情

相关推荐

期权专题9:雪球期权(一)(BSM+蒙特卡罗定价)

python;雪球定价;蒙特卡罗

mhmh123789的博客 8047

leetcode201. 数字范围按位与

文章目录题目:201. 数字范围按位与基本思想:边界的最长公共前缀 题目:201. 数字范围按位与 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字按位与(包含 m, n 两端点)。 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/bitwise-and-of-numbers-range

yyf_blog 432

手把手教你用Wireshark抓包分析Profinet非周期通信(附实战案例)

本文详细解析了PROFINET非周期通信(RTA)的技术原理与实战应用,通过Wireshark抓包分析,揭示从PLC请求到驱动器响应的完整对话过程。涵盖实验环境搭建、关键配置步骤、典型参数访问流程及故障诊断案例,帮助工程师深入理解并优化工业网络通信性能。

Black的专栏 1011

【中等】力扣算法题解析LeetCode201数字范围按位与

题目要求计算区间 [left, right] 内所有数字按位与的结果。直接遍历会超时,因此采用 Brian Kernighan 算法,通过不断清除 right 的最低有效位1,快速找到 left 和 right 的二进制公共前缀。最终结果即为公共前缀后补0。算法时间复杂度 (O(k))((k) 为 right 中1的个数),空间复杂度 (O(1))。

ylumwd的博客 516

LeetCode201题_数字范围按位与

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

qq_40263592的博客 1251

LeetCode201-数字范围按位与

LeetCode201-数字范围按位与 题目 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字按位与(包含 m, n 两端点)。 输入: [5,7] 输出: 4 输入: [0,1] 输出: 0 解法 方法一:暴力(超时) 方法二: m和n有以下几个情况: (1)m=n 返回m (2)m=0 返回0 (3)m=1 返回0 (4)n/m > 1证明所有的与操作结果都是0 思路: 如果m到n此范围内所有数字按位与的话,m和n

viva_la__vida的博客 245

golang力扣leetcode 201.数字范围按位与

201.数字范围按位与201.数字范围按位与题解代码 201.数字范围按位与 201.数字范围按位与 题解 思路:就是找最长公共前缀,那么只要一直右移,直到左右端点相等即可 代码 package main func rangeBitwiseAnd(left int, right int) int { cnt := 0 for left != right { left >>= 1 right >>= 1 cnt++ } return left <<

清风 661

leetcode201. 数字范围按位与

其思想是,对于给定的范围 [m,n](m

OceanStar的博客 347

Leetcode201. 数字范围按位与

Leetcode201. 数字范围按位与

ProgramNovice的博客 552

Leetcode 201. 数字范围按位与 C++

Leetcode 201. 数字范围按位与 题目 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字按位与(包含 m, n 两端点)。 测试样例 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 题解 数学 我们可以知道在[m,n]范围内的所有数,他们的高几位一定是相同的,而他们的低几位会出现差别。另外,我们根据与的特点,只要0与就是0,显然,在[m,n]范围内的数其具有差别的低几位的与一定是0

weixin_43750513的博客 250

leetcode 201. 数字范围按位与

leetcode 201. 数字范围按位与 题目详情 题目链接 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字按位与(包含 m, n 两端点)。 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 我的代码 class Solution { public: int rangeBitwiseAnd(int m, int n) { if (m == 0) {

qq_33789406的博客 146

Leetcodeleetcode201 数字范围按位与 题解

leetcode201题解题目思路代码 题目 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字按位与(包含 m, n 两端点)。 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 题目链接 思路 好久没有做题了,看到今天的每日一题是中等难度就冒个泡水一发。 看到位运算先找找规律:  22&23=0\ 2^2 \& 2^3=0 22&23=0 &nbsp

要继续努力的孤独的博客 372

力扣(合并区间)

给定一组可能重叠或相邻的整数区间,合并所有重叠或端点相接的区间,返回不重叠的最小区间列表。例如输入 [[1,3],[2,6],[8,10],[15,18]],输出 [[1,6],[8,10],[15,18]]。核心是先按左端点升序排序,再单次线性扫描完成合并,避免暴力两两比较。

weixin_52811458的博客 303

LeetCode 155. 最小栈|Python 解法详解

这道题的关键是:使用主栈保存数据,辅助栈在每一层同步保存“截至当前位置的最小值”。理解这一点后,再结合边界条件检查,代码就能保持清晰且稳定。

a1250467048的博客 240

LeetCode 1. 两数之和 | 从暴力枚举到哈希表最优解 + 空间换时间思想全复盘

文章摘要 题目要求在数组中找到两数之和等于目标值的下标。核心思路是优化查找效率: 暴力法:双重循环枚举所有数对,时间复杂度O(n²),效率低但易实现。 哈希表优化:利用哈希表O(1)查找特性,遍历时存储已访问元素,每次计算差值并查询,时间复杂度降至O(n)。关键细节是先查后存,避免自匹配。 代码实现:哈希表法通过一次遍历完成,空间换时间,边界处理需注意空数组和不足两元素的情况。 常见错误:内层循环起始点、哈希表键值设计、立即返回结果等易错点需警惕。 面试要点:优先选择哈希表解法,解释与暴力法的差异,强调时间

yc2284238579的博客 263

LeetCode //MySQL - 1204. Last Person to Fit in the Bus

This SQL query solves the problem of finding the last person who can board a bus without exceeding the 1000 kg weight limit. The solution involves: Calculating a running total of weights ordered by boarding turn using a window function Filtering to only in

Made in Code 374

leetcode】153. 寻找旋转排序数组中的最小值js

本文介绍了在旋转排序数组中寻找最小值的二分查找算法。通过比较中间元素与数组末尾元素,可以确定最小值所在区间:若中间值大于末尾值,则最小值在右侧;否则在左侧或当前位置。文章提供了两种实现方式,第一种通过样例总结返回nums[l],第二种采用更标准的二分写法,确保循环结束时left==right。两种方法时间复杂度均为O(logn),适用于解决LeetCode相关题目。关键点在于利用旋转数组的特性缩小搜索范围

2402_83244812的博客 155

LeetCode //C - 1203. Sort Items by Groups Respecting Dependencies

This problem involves sorting items with group constraints and dependency relations. The key steps are: Assign unique groups to items with no group (-1) Build dependency graphs for both items and groups Perform topological sorting on both graphs If both so

Made in Code 384

10.LeetCode算法习题讲解--滑动窗口--最大连续为一的个数

利用滑动窗口解决最大连续1的个数

Jammy_1的博客 225

LeetCode hot100——最大子数组和

给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。6连续子数组 [4,-1,2,1] 的和最大,为 6。nums = [1]123如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的求解。

weixin_42927227的博客 213

LeetCode hot100——合并两个有序链表

将两个升序链表合并为一个新的链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。[][0]l2。

weixin_42927227的博客 152

栈和队列专题(三):LeetCode 622. 设计循环队列|数组环形复用 + front/rear 边界详解

本文详细讲解了循环队列的设计与实现,重点分析了如何利用数组实现环形结构以避免空间浪费。文章首先通过示例说明普通数组队列的"假溢出"问题,然后提出循环队列的解决方案。核心内容包括:1. 采用牺牲一个存储位置的方案区分队列空满状态;2. 明确front和rear指针的语义(front指向队首元素,rear指向下一个可插入位置);3. 使用取模运算实现下标的循环移动。文章完整实现了LeetCode 622题要求的全部接口,并分析了各种边界情况,特别是队尾元素的获取方法。最后对比了数组实现与链式

Luminousone的博客 477

VMware-workstation-full-17.0.0-20800274.zip

打开VMware17软件后,点击创建新的虚拟机,如图:勾选自定义(高级),然后点击 下一步:选择虚拟机硬件兼容性,这里我选择 Workstation 12.x ,希望这个虚拟机可以在更低的版本VMware软件也可以运行,点击下一步:安装客户机操作系统,勾选稍后安装操作系统,然后点击下一步:选择客户机操作系统,我安装的是Ubuntu22.04,所以勾选Linux,点击下一步:命名虚拟机,虚拟机名称可以随便写,安装位置最好别选择C盘,后面随着系统的不断使用,会不断占用磁盘空间,我选择在E盘的创建一个目录来存放,点击下一步:处理器配置,根据自己电脑的配置来分配,可以指定电脑配置的1/2或1/3分配给虚拟机,我这里直接按默认给的,点击下一步:虚拟机的内存,根据自己电脑的配置来分配,可以指定电脑配置的1/2或1/3分配给虚拟机,我这里直接按默认给的,点击下一步:网络类型,勾选使用桥接网络,这样的话,安装后的Ubuntu系统可以直接访问因特网,点击下一步:选择I/O控制器类型,直接按照推荐的来,点击下一步:选择磁盘类型,直接按照

MinGW 64位 gcc 4.9.2

MinGW64位版本4.9.2,默认编译出来是64位的,下载解压就可以直接使用,需要将MinGW的bin路径加到系统环境变量PATH里。

上一篇: leetcode-5:最长回文子串
下一篇: Swagger简单入门
苦泉
博客等级 码龄7年 362粉丝 55原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值