面试结束的这些日子好几次接触到BitMap这个东西。到底是啥呢,究其原因就是虽然它的使用条件较为苛刻,但是它对应的时间复杂度和空间复杂度真的是惊人的好。

首先是根据其思想先写了一个比较差的实现代码:

 #include <iostream>
#include <cstdio> using namespace std; int main()
{
//bitmap的简单应用
//查出1到10中一共9个不重复的数字,到底少了哪个数字
long long n=;
//假设少了数字3
for(int i=;i<;i++){
if(i!=){
n^=<<(i);
printf("the n is %lld\n",n);
}
} for(int i=;i<;i++){
n^=<<(i);
}
//n^=1<<(sizeof(n)*8-2);
int ans=;
while(n>>=){
ans++;
}
printf("%d\n",ans);
return ;
}

也就是时间复杂度大概是n的样子,不过系数相对大了些。据说Java中有相对应的包来实现,想来应该会用补码的方式进行一个简单的优化吧。

我能想到的就是在合理的条件下使用lowbit的方式求出每个缺省值,这样子还可以将缺少的数字推广开来。

来自编程珠玑的简单思考

http://blog.jobbole.com/109024/?utm_source=blog.jobbole.com&utm_medium=relatedPosts

BitMap的简单实现的更多相关文章

  1. [MySQL] mysql中bitmap的简单运用

    bitmap就是在一个二进制的数据中,每一个位代表一定的含义,这样最终只需要存一个整型数据,就可以解释出多个含义.业务中有一个字段专门用来存储用户对某些功能的开启和关闭,如果是传统的思维,肯定是建一个 ...

  2. Bitmap的一个简单实现

    一.Bitmap简介 Bitmap是一种常用的数据结构,其实就是一个连续的数组,主要是用于映射关系,如映射整数,一位代表一个数,即这里假设Bitmap有100Bytes * 8 这么多的位,那么这里可 ...

  3. [翻译]开发文档:android Bitmap的高效使用

    内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...

  4. 网易视频云技术分享:linux软raid的bitmap分析

    网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...

  5. Android学习之——图形图像处理(Bitmap、BitmapFactory)(一)

    转载自http://blog.csdn.net/csxwc/article/details/10345235 Bitmap是Android系统中的图像处理的最重要的类之一.用它可以获取图像文件信息,对 ...

  6. Drawable、Bitmap、byte[]之间的转换

    android在处理一写图片资源的时候,会进行一些类型的转换: 1 Drawable → Bitmap 的简单方法 ((BitmapDrawable)res.getDrawable(R.drawabl ...

  7. MD中bitmap源代码分析--入题概述

    在MD模块中,各级raid都使用的一份bitmap的源码,也就是说共用一种bitmap的流程,下面以raid1的使用为例来分析bitmap的工作原理. 在使用raid1磁盘阵列的时候,对于数据的可靠性 ...

  8. Android开发——Drawable与Bitmap知识

    从资源中获得drawable Drawable drawable = getResources().getDrawable(R.drawable.xxx); drawable转换bitmapdrawb ...

  9. [翻译]Bitmap的异步加载和缓存

    内容概述 [翻译]开发文档:android Bitmap的高效使用 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently", ...

随机推荐

  1. [Mysql]——通过例子理解事务的4种隔离级别(转)

    第1级别:Read Uncommitted(读取未提交内容) 第2级别:Read Committed(读取提交内容) 第3级别:Repeatable Read(可重读) 第4级别:Serializab ...

  2. xml转化为Dictionary

    代码 public SortedDictionary<string, object> FromXml(string xml) { SortedDictionary<string, o ...

  3. .net中几个经常用到的字符串的截取

    string str="123abc456";int i=3;1 取字符串的前i个字符   str=str.Substring(0,i); // or  str=str.Remov ...

  4. Java运算符号,对象赋值,别名

    生活发生的一切,才会促使着我继续前行,今天继续更新哦,看书中的代码练习. 例子1  引入net.mindview.util.Print.* ,方便打印结果. package com.date0529; ...

  5. 9.13 h5日记

    9.13 面试题 为什么两个P出此案的效果不同,原因是 浏览器在解析第二个P的时候,因为字母没有空格,浏览器会认为这个单词没有打完,所以不会换行. 列表 ul ol dl li 1.无序列表 ul ( ...

  6. Liunx Mkdir

    linux mkdir命令: 创建目录 介绍:该命令创建指定的目录名,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录1语法: mkdir [-m] [-p] 目录 ...

  7. Linux CentOS 7 & JDK 1.7 安装与配置

    前言 简单记录一下在CentOS 7中安装配置JDK 1.7的全过程~ 下载 首先是jdk 1.7 64bit & 32bit的下载地址: jdk-7u79-linux-x64.tar.gz ...

  8. andorid 计算器

    avtivity_main.xml <?xml version="1.0" encoding="utf-8"?> <GridLayout xm ...

  9. iOS.AutoLayout.2.CustomView-with-AutoLayout

    Custom View Which Support AutoLayout 创建支持AutoLayout的Custom View AutoLayout 通过使view更加的自组织来减轻controlle ...

  10. iOS.CocoaPods.0

    1. CocoaPods CocoaPods 是Objective-C (iOS and OS X) projects 的依赖管理器. A CocoaPod (singular) is a speci ...