python算法:rangeBitwiseAnd(连续整数的与)
def rangeBitwiseAnd(self, m, n):
i = 0
while m != n:
m >>= 1
n >>= 1
i += 1
return n << i
------
testcase:
【4,7】
4:0x0100
5:0x0101
6:0x0110
7:0x0111
可以用一个 while 循环来做,但是效率太低,有个非常牛逼的算法,从leetcode上学来的,解释下:
假设头尾的两个数字分别是 m=0bxyz0×××,n=0bxyz1xxx,
其中,也就是说把一个数字做了分解,第一部分是高位两个数字共同的部分,另一部分是低位两个数字差异的部分:
此时,结果值,分成两部分:高位是两个数字高位公共的部分,低位是全0.
好了,为什么是这样?因为这两个值的低位两个数字差异的部分必然能找到0!
这个点算是一个转折点了,也迎来本算法的高潮。也就是说 连续的整数中,低位不同的部分每一个位必然存在0于其间的某个整数中。
0x01111111
0x10000000
这个结论不好直接想,但是可以用反证的思维想下,如果找不到这样一个0,那么说明这个连续整数数列是这样的:
0bxyz***1***
0bxyx***1***
0bxyz***1***
0bxyz***1***
obxyz***1***
那一串1,就像是一堵墙一样堵住了连续整数的进位,这样也就限制了连续整数的个数。
当1串位于第0位时,连续整数个数最多为1
当1串位于第1位时,连续整数个数最多为2
当1串位于第2位时,连续整数个数最多为4
python算法:rangeBitwiseAnd(连续整数的与)的更多相关文章
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- python算法(一)
python算法(一) 一.求数x的因子 x=100 divisors=()#初始化空的元组 for i in range(1,x): if x%i==0: divisors=divisors+(i, ...
- Python算法与数据结构--求所有子数组的和的最大值
Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...
- Python算法:推导、递归和规约
Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...
- Python算法(含源代码下载)
关键字:Python Algorithms Python算法 Mastering Basic Algorithms in the Python Language 使用Python语言掌握基本算法 P ...
- python算法题 python123网站单元四题目
目录 一:二分法求平方根 二:Collatz猜想 三:算24(只考虑满足,不考虑把所有情况找出来) 下面向大家介绍几个python算法题. 一:二分法求平方根 1.题目要求为 2.输入输出格式为 ...
- python算法介绍:希尔排序
python作为一种新的语言,在很多功能自然要比Java要好一些,也容易让人接受,而且不管您是成年人还是少儿都可以学习这个语言,今天就为大家来分享一个python算法教程之希尔排序,现在我们就来看看吧 ...
- Java && Python 算法面试常用类以及方法总结
数据结构 逻辑结构上: 包括集合,线性结构,非线性结构. 存储结构: 顺序存储,链式存储,索引存储,散列存储. Java 常见数据结构 大专栏 Java && Python 算法面试 ...
- GitHub标星2.6万!Python算法新手入门大全
今天推荐一个Python学习的干货. 几个印度小哥,在GitHub上建了一个各种Python算法的新手入门大全,现在标星已经超过2.6万.这个项目主要包括两部分内容:一是各种算法的基本原理讲解,二是各 ...
- python算法常用技巧与内置库
python算法常用技巧与内置库 近些年随着python的越来越火,python也渐渐成为了很多程序员的喜爱.许多程序员已经开始使用python作为第一语言来刷题. 最近我在用python刷题的时候想 ...
随机推荐
- Microsoft FIM: Working with Domino Connector v8
Microsoft FIM: Working with Domino Connector v8 Posted on July 22, 2013 by Michael Pearn - 4 Comment ...
- English Training Material - 04
Inviting What kinds of social activities in your city could be appropriate ways of entertaining visi ...
- Android——微信界面(简易版)
前面我们简单的介绍了一下android的五大布局,那么现在我们来实践一下,写一个简单的微信界面 首先,我们新建一个weixin.xml的linnerlayout布局 我们日常使用的微信,从简单的方面来 ...
- Effective Java 阅读笔记——方法
38:检查参数的有效性 每当编写方法或者构造器的时候,应该考虑它的参数有哪些限制,在方法的开头处对参数进行检查,并且把这些限制写入文档. 注意: 对于公有方法,应该使用@throws标签在文档中说明违 ...
- 【原/转】【boost】智能指针使用规则以及介绍
智能指针机制跟Objective-C里面的retainCount引用计数有着相同的原理,当某个对象的引用计数为0是执行delete操作,类似于autorelease 初学者在使用智能指针时,很多情况下 ...
- genymotion虚拟机启动失败
错误提示如下: Make sure that you have installed it correctly before starting Genymotion. 解决方法(重启VirtualBox ...
- 深入理解java虚拟机(1)------内存区域与内存溢出
在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻. 而Java确把这一工作交给了虚拟机来处理. 我们首先来看看关于内存的问题. 1.问题: 1)java ...
- mysql中FIND_IN_SET的使用方法
在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_ ...
- Effective Java 63 Include failure-capture information in detail message
Principle To capture the failure, the detail message of an exception should contain the values of al ...
- Java主要有那几种文件类型?各自的作用是什么
1.源代码.java程序员编译的源代码. 2..class 字节码文件 jvm实现跨平台的中间编译文件. 3.jar包 讲字节码文件打包好,便于查找和使用.