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

企业手机网站建设wordpress托管 安装

企业手机网站建设,wordpress托管 安装,开发一栋楼需要多少钱,怎么自己购买域名 建设网站目录 一、腾讯面试题 二、解决办法——位图 2.1、那么什么是位图? 三、位图的模拟实现 3.1、位图的构造 3.2、存放数据 3.3、检测数据是否存在 3.4、设置某个数据的对应位为0 四、位图模拟代码(完整) 一、腾讯面试题 给40亿个不重复…

目录

一、腾讯面试题

二、解决办法——位图

2.1、那么什么是位图?

三、位图的模拟实现

3.1、位图的构造

3.2、存放数据

3.3、检测数据是否存在

3.4、设置某个数据的对应位为0

四、位图模拟代码(完整)


一、腾讯面试题

        给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。

思考:

        思路一:没有学习位图之前,我们一般最快能反应到使用哈希表的办法来解决,但是是有40亿的整形数据,这是一个什么概念?一个整形占4个字节,相当于要占用16G的内存空间,但生活中有多少电脑有这么大的内存空间?就算你是16G内存,难道你打开编译器编写代码不占空间?所以这个想法显然走不通;

        思路二: “排序+二分查找” 的办法来解决,时间复杂度上,排序最快也就是O(NlogN),二分查找logN,但是依然面临一个问题——内存存不下,二分查找依然是在内存中查找,但是16G的数据都存不了,还查个...所以很难受,根本查不了;

二、解决办法——位图

        

        我们可以这样规划空间,一个字节是32位,可以把每一位都利用起来,也就是说,一个 bit位表示一个数字,32位用可以来存放32个不同的数字,怎么存?可以通过映射的方式,1表示这意味数字存在,0表示不存在,具体的如下图:

2.1、那么什么是位图

        位图就是用每一位来存放某种状态,适用于 海量数据,无重复整数 的场景,通常用来判断某个数据是否存在;

2.2、有什么好处

        ——大大节省了空间

        例如上述栗子,10个整数本来需要40个字节,而用位图表示只需要3个字节,那么40亿个整数就只占512M的大小了~

三、位图的模拟实现

3.1、位图的构造

        默认初始化为一个字节,当然要也可以手动指定,而且一般需要多给一个字节,具体原因在注释当中;

如下代码:


public class MyBitSet {public byte[] elem;//记录当前位图中,存放了多少个有效数据public int usedSize;/*** 默认初始化位为一个字节*/public MyBitSet() {this.elem = new byte[1];}/*** 指定构造方法中的初始化位数* 一般会多给一个字节,因为如果是12,那么12%8=4,不能整除,还多出来4个bit位* 所以多给一个也无所谓(不要那么抠)*/public MyBitSet(int n) {this.elem = new byte[n / 8 + 1];}
}

3.2、存放数据

        创建一个set方法用来存放数据,首先要先判断数据是否小于0,若小于0就是不符合要求的,直接抛出异常;

怎么存放数据呢?如下图:

最后还要注意,若数据过大,需要考虑扩容(否则会越界访问);

代码如下:

    /*** 设置某一位为1(1为有效)* @param val*/public void set(int val) {if(val < 0) {//必须是大于等于零的整数throw new IndexOutOfBoundsException();}//先确定val在elem的哪一个下标的哪一个bit位int arrayIndex = val / 8;//扩容if(arrayIndex > elem.length - 1) {elem = Arrays.copyOf(elem, arrayIndex + 1);}int bitIndex = val % 8;elem[arrayIndex] |= (1 << bitIndex);//不能是异或,会修改原来的值usedSize++;}

3.3、检测数据是否存在

         创建一个get方法,先检验val值是否小于零,小于直接抛异常,然后还是通过除8模8,左移1的方式确定位置,与 存放数据 不同, 这回使用 按位与,若按位与得到的数字为0,则说明原来这一位就是0,数字不存在,返回false,反之则存在,返回true;

如下代码:

/*** 判断当前位是不是1* @param val* @return*/public boolean get(int val) {if(val < 0) {//必须是大于等于零的整数throw new IndexOutOfBoundsException();}//先确定val在elem的哪一个下标的哪一个bit位int arrayIndex = val / 8;int bitIndex = val % 8;if((elem[arrayIndex] & (1 << bitIndex)) != 0) {return true;}return false;}

3.4、设置某个数据的对应位为0

        

        创建一个reSet方法,先检验val值是否小于零,小于直接抛异常;怎么设置为某一位为0呢,好像直接按位与、或、异或都不行,实际上我们可以这样做,按原来的方法,除8模8,左移1的方式确定位置,然后给这个数据取反,再 按位与等 这一字节,就可以了,如下图:

 代码如下:

    /*** 将对应位置 设置为0* @param val*/public void reSet(int val) {if(val < 0) {//必须是大于等于零的整数throw new IndexOutOfBoundsException();}//先确定val在elem的哪一个下标的哪一个bit位int arrayIndex = val / 8;int bitIndex = val % 8;elem[arrayIndex] &= ~(1 << bitIndex);usedSize--;}

四、位图模拟代码(完整)

public class MyBitSet {public byte[] elem;//记录当前位图中,存放了多少个有效数据public int usedSize;/*** 默认初始化位为一个字节*/public MyBitSet() {this.elem = new byte[1];}/*** 指定构造方法中的初始化位数* 一般会多给一个字节,因为如果是12,那么12%8=4,不能整除,还多出来4个bit位* 所以多给一个也无所谓(不要那么抠)*/public MyBitSet(int n) {this.elem = new byte[n / 8 + 1];}/*** 获取当前位图存储的数据量*/public int getUsedSize() {return this.usedSize;}/*** 设置某一位为1(1为有效)* @param val*/public void set(int val) {if(val < 0) {//必须是大于等于零的整数throw new IndexOutOfBoundsException();}//先确定val在elem的哪一个下标的哪一个bit位int arrayIndex = val / 8;//扩容if(arrayIndex > elem.length - 1) {elem = Arrays.copyOf(elem, arrayIndex + 1);}int bitIndex = val % 8;elem[arrayIndex] |= (1 << bitIndex);//不能是异或,会修改原来的值usedSize++;}/*** 判断当前位是不是1* @param val* @return*/public boolean get(int val) {if(val < 0) {//必须是大于等于零的整数throw new IndexOutOfBoundsException();}//先确定val在elem的哪一个下标的哪一个bit位int arrayIndex = val / 8;int bitIndex = val % 8;if((elem[arrayIndex] & (1 << bitIndex)) != 0) {return true;}return false;}/*** 将对应位置 设置为0* @param val*/public void reSet(int val) {if(val < 0) {//必须是大于等于零的整数throw new IndexOutOfBoundsException();}//先确定val在elem的哪一个下标的哪一个bit位int arrayIndex = val / 8;int bitIndex = val % 8;elem[arrayIndex] &= ~(1 << bitIndex);usedSize--;}}

 


文章转载自:

http://axutegxR.mnsmb.cn
http://hjJt7eVn.mnsmb.cn
http://jXbnM8sO.mnsmb.cn
http://2INIf2V6.mnsmb.cn
http://EUf0nVpj.mnsmb.cn
http://N9grwrmq.mnsmb.cn
http://NUuiZ0qg.mnsmb.cn
http://XMXO2uGX.mnsmb.cn
http://3BF5vMYW.mnsmb.cn
http://zPrwuxwd.mnsmb.cn
http://EgrK6uKL.mnsmb.cn
http://VzT42yAG.mnsmb.cn
http://mUD5USCE.mnsmb.cn
http://aJPNOcAP.mnsmb.cn
http://rKQL6BWC.mnsmb.cn
http://pd8NjGgK.mnsmb.cn
http://rACqnvRZ.mnsmb.cn
http://VkoiwlZk.mnsmb.cn
http://LfozOir4.mnsmb.cn
http://XKZxEehF.mnsmb.cn
http://hXyH9kAw.mnsmb.cn
http://iLvbN18r.mnsmb.cn
http://vPySraqw.mnsmb.cn
http://h39sXW7q.mnsmb.cn
http://sTa5OmaI.mnsmb.cn
http://orPmKSqZ.mnsmb.cn
http://VMmy48S5.mnsmb.cn
http://ghvn7nhZ.mnsmb.cn
http://hTOtAvrp.mnsmb.cn
http://YGEtexAr.mnsmb.cn
http://www.dtcms.com/wzjs/689542.html

相关文章:

  • iis 建网站手机访问网站开发及app开发报价单
  • 荆州网站建设 众火网宿迁网站建设宿迁
  • 涿州网站建设公司企业网站内容建设 知乎
  • 做视频的网站有哪些用插件做的炫酷网站
  • 成都科技网站建设电物业管理系统价格
  • 网站建设來超速云建站asp.net 跳转别的网站
  • 企业网站开发使用方法镇江网站建设活动方案
  • wordpress网站前台打开慢wordpress 七牛插件
  • 如何制作网上商城网站优化搜索排名
  • 建网站需多少钱工业设计专业三大软件
  • 做交易网站需要办什么证网站开发合同书
  • 企业网站策划过程南京做网站制作公司
  • 网站建设 尚瑞科技长春网站建设于健
  • 做网站大图素材兰州网站seo分析
  • 城乡建设部统计网站思途建站
  • 江阴哪家做网站便宜网站域名管理中心
  • 设计软件免费下载网站wamp做的网站标签图标
  • 免费建站网站seo西安企业网站
  • 哪里有未成年做的网站取个网站建设公司名字
  • 域名备案企业网站内容手机网站建设的现状
  • 湖南医院响应式网站建设企业应用市场app下载安装到手机
  • 做外贸 用国内空间做网站建设银行个人网银网站
  • 建网站的域名是什么意思wordpress无法显示文章
  • 北京网站建设的公天津建站方案
  • 龙岗网站优化公司案例Wordpress网站仿站
  • 公众号和网站小城镇建设期刊网站
  • 电子商务网站平台建设策划社区网站优化
  • 哪些企业必须用网站湖州高端网站设计
  • 排名前十的网站盐城公司网站建设电话
  • 我的世界做壁纸网站企业网站代备案