BitMap是用bit位来记录数据存在与否的一种算法。在处理大数据时,可以节省大量空间,速度也很快。

问题:已知有n个整数,这些整数的范围是[0,100],请你设计一种数据结构,使用数组存储这些数据,并提供两种方法, 分别是addMember和isExist.下面是这种数据结构的类的定义。

思路1:用数组存储,查找是否存在需要for循环n, 有n个数那么复杂度为O(n)

思路2: 用数组存储,添加数据则arr[index] = 1, 这样查找是否存在有n个数赋值度为O(1),,直接用过数组下标判断是否为1

思路3:加入有1亿个数呢, 上面思路2则会造成空间浪费, 我们可以用过1个整数表示32字节,每个字节则可以表示一种状态,这样空间上缩小了1/32

class BitMap {constructor(size) {this.bitArr = new Array(size)// 初始化操作this.bitArr.fill(0)}/*** 添加一个数据* @param {*} data */addMember(data) {// 1. 计算索引let cur_index = Math.floor(data/32)// 2. 计算传入的data在当前索引中位数(1个索引可以表示32位)let bit_index = data % 32// 3. 计算加入后的数据,并存储this.bitArr[cur_index] = this.bitArr[cur_index] | 1<<bit_inde

数据结构-BitMap相关推荐

  1. redis常用命令总结,一文足以(5种基本数据结构+bitmap+Geo+HyperLogLog+Streams)

    与mysql 的区别 MySQL数据库需要自己去创建数据库,Redis数据库不用自己创建数据库,默认情况下有0-15号数据库 Redis数据库没有表,数据是以key-value键值对的形式存在数据库中 ...

  2. js计算字典的个数_JS数据结构与算法_集合字典

    写在前面 说明:JS数据结构与算法 系列文章的代码和示例均可在此找到 一.集合Set 1.1 集合数据结构 集合set是一种包含不同元素的数据结构.集合中的元素成为成员.集合的两个最重要特性是:集合中 ...

  3. 数据算法: Bitmap

    1. 初识 Bitmap Bitmap 也被称为位图.Bitmap 既是一种数据结构,又是一种图片类型.从数据结构的角度讲,Bitmap 适用于以下场景,后文会逐一进行阐述: 判重 定基 排序 压缩 ...

  4. io多路复用的原理和实现_彻底理解 IO 多路复用实现机制

    本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy已收录,有 ...

  5. 基于标准C语言的数字图像处理基本框架(转)

    考虑到现有的数字图像处理都是基于Windows平台,都或多或少使用了Win32 API函数,不能移植到Linux或者嵌入式系统中.为了使程序可移植,采用标准C语言建立了数字图像处理的基本框架,如下图所 ...

  6. Redis运维和开发学习笔记(1) Redis简介

    文章目录 Redis的特性 速度快 持久化 多种数据结构 主从复制 高可用和分布式 典型的应用场景 Redis启动和可执行文件 Redis可执行文件说明 启动方式 验证redis redis常用配置 ...

  7. Java面试题及答案,java对外提供接口

    Redis简介 Redis与Memcached区别 Redis优点 Redis缺点 Redis数据类型 String Hash List Set Sorted set Redis事务 MULTI&am ...

  8. 基于 MaxCompute + Hologres 的人群圈选和数据服务实践

    简介: 本文主要介绍如何通过 MaxCompute 进行海量人群的标签加工,通过 Hologres 进行分析建模,从而支持大规模人群复杂圈选场景下的交互式体验,以及基于API的数据服务最佳实践. 本文 ...

  9. 双非院校非科班的学弟,刚刚拿到了腾讯、网易、美团等大厂Offer

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 359 篇原创分享 作者 l 霜华 来源 l Hollis(ID:hollischuang) 本文来自作者投稿,作者是是双 ...

  10. 【面试】彻底理解 IO多路复用

    目录 1.什么是IO多路复用? 2.为什么出现IO多路复用机制? 3.IO多路复用的三种实现方式 4.select函数接口 5.select使用示例 6.select缺点 7.poll函数接口 8.p ...

最新文章

  1. 当客户说“你们的价格太高了”
  2. 用电脑更新手机ios系统_手机系统频繁提示更新,到底要不要更新?
  3. MySQL通过两表避免回表_mysql利用覆盖索引避免回表优化查询
  4. 今天,我种下了一朵小蓝花
  5. hdoj 2041 超级阶梯
  6. 20190814:(leetcode习题)移动零 (补)
  7. C++ 继承与组合的区别
  8. 向对象中添加数据_在RMarkdown编译HTML文件中添加数据下载按钮
  9. CDA二级建模分析师考试相关
  10. SwiftUI HealthKit 基础教程
  11. utf8字符集中漢字默認占三個字節
  12. 吉他屋-吉他谱-吉他教程
  13. 我的世界java版如何装mod_我的世界MOD安装详解教程 全方位介绍MOD
  14. 分享一个ZPL指令在线测试网址
  15. 敏捷开发之道 总结小记
  16. 韬光逐薮 含章未曜#新学期 新FLAG#
  17. PoE视频监控解决方案
  18. 大学生学计算机的自我介绍范文带翻译,大学生英语自我介绍带翻译范文.doc
  19. 跟益达学Solr5之使用Jetty部署Solr
  20. linux 渗透工具_适用于Linux的十大最佳渗透测试工具

热门文章

  1. 2022年武汉市仿制药一致性评价政策性奖励申报条件要求以及奖补措施!
  2. 众多纹理合辑素材一键即可获取,再也不用到处找了
  3. 宝宝上幼儿园后爱生病为什么?
  4. Structured Streaming中如何通过schema_of_json方法动态解析Kafka传入的JSON数据的Schema
  5. vue 中的 $nextTick(cb)详细介绍
  6. php用go做跳转翻页,go.php · 董志强/go.php 站内外链跳转源码 - Gitee.com
  7. 噪声与干扰:影响通信的哼哈二将
  8. Kjava/J2ME UI设计实践 --- 兼顾功能强大与操作简单这对矛盾
  9. python数据挖掘实战笔记——文本挖掘(7):TF-IDF原理
  10. kali linux几种桌面壁纸,桌面应用|在 Kali Linux 中更改 GRUB2 背景的 5 种方式