一道百度最新面试题的实现
来源:互联网 发布:深圳高速工程顾问 知乎 编辑:程序博客网 时间:2024/05/16 19:44
面试题为:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。
解答如下:
思路:如果采用最容易想到的方法,那就是双重寻找,一个一个比较,时间复杂度也是0(N的二次方), 不可取。
而如果采用bitset,那么首先空间上多花一部分 , 但是空间复杂度降到了 0(N),速度快了太多
采用bitset。直接上代码。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char byte_t;
int MAX = 100000;
void gen_rand(int num, int *arr)
{
int i;
unsigned long int ran;
srand(time(NULL));
for (i = 0; i < num; i++)
{
ran = rand() % MAX;
arr[i] = ran;
}
}
void noexist_bitset(int a[], int num)
{
printf("bitset method result:\n");
byte_t bitarray[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
int mem_count = num / 8 + 1;
unsigned char *bitset = (unsigned char *)malloc(sizeof(char) * mem_count);
memset(bitset, 0, sizeof(char) * mem_count);
int i = 0;
int last_servel = num % 8;
unsigned char *cur_ptr = bitset + num / 8;
for (; i < 8 - last_servel; i++) //set 1 for last several need't bit
{
*cur_ptr |= bitarray[8 - i - 1];
}
i = 0;
int cur_pos;
int offset;
for (; i < num; i++)
{
cur_pos = a[i] / 8;
offset = a[i] % 8;
cur_ptr = bitset + cur_pos;
*cur_ptr = *cur_ptr | bitarray[offset];
}
i = 0;
for (; i < mem_count; i++)
{
cur_ptr = bitset + i;
int j = 0;
for (; j < 8; j++)
{
unsigned char temp = *cur_ptr;
int cmp_value = temp & bitarray[j];
if (cmp_value == 0)
printf("%d\t", i * 8 + j);
}
}
free(bitset);
printf("\n");
}
int main(int argc, char *argv[])
{
int a[MAX];
gen_rand(MAX, a);
noexist_bitset(a, MAX);
}
- 一道百度最新面试题的实现
- 百度面试题一道
- 一道百度面试题
- 一道百度面试题
- 一道百度面试题
- 一道百度面试题
- 一道百度面试题
- 一道百度面试题
- 一道面试题的实现
- 百度一道面试题的PHP解答
- 百度校园招聘的一道面试题
- 百度一道面试题引发的思考
- 百度最新面试题
- 百度最新面试题
- 百度最新面试题
- 一道百度面试题题解
- 一道解读百度面试题
- 忆一道百度面试题
- dom4j的应用(1)
- android Tips
- android学习笔记 ----关于IME
- STL--stack/queue的使用方法
- web应用每晚12点定时执行程序代码实例
- 一道百度最新面试题的实现
- dom4j的应用(2)
- PHP学习实录
- U盘安装UbuntuServer_adm64_10.04
- 直接插入排序算法原理及JAVA实现
- ld.so: object ‘/lib/libcwait.so’ from /etc/ld.so.preload cannot be preloaded: ignore
- COM编程快速入门
- 【Cocoa(mac) Application 开发系列之三】自定义NSView并绘制一些常见的图形及字符串;
- 串行接口代替并行接口时代(一)