数组A包含0到n的所有整数,但其中缺了一个,且数组A里的整数都是用二进制形式存储,求这个缺失的整数
来源:互联网 发布:查看视图的sql语句 编辑:程序博客网 时间:2024/05/16 04:42
题目描述:数组A包含0到n的所有整数,但其中缺了一个。在这个问题中,只用一次操作无法取得数组A里某个整数的完整内容。此外,数组A的元素皆以二进制表示,唯一可用的访问操作是“从A[i]中取出第j位数据”,该操作的时间复杂度为常数。请编写代码找出那个缺失的整数。
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int findMissing(vector<vector<int>> &array);
int findMissing(vector<vector<int>> &input,int column);
vector<int> tenToBinary(int n);
int main()
{
vector<vector<int>> nums;
int num[] = { 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
for (int i = 0; i < 13; i++)
{
nums.push_back(tenToBinary(num[i]));
cout << 1 << ":";
for (int j = 0; j < 32;j++)
{
cout << nums[i][j];
}
cout << endl;
}
int result = findMissing(nums);
cout << "缺少的那个数为:"<< result << endl;
return 0;
}
int findMissing(vector<vector<int>> &array)
{
return findMissing(array, 0);
}
int findMissing(vector<vector<int>> &input,int column)
{
// 结束递归的条件
if (input.size() == 0)
{
return 0;
}
vector<vector<int>> zeroBits;
vector<vector<int>> oneBits;
for (int i = 0; i <input.size(); i++)
{
if (input[i][31 -column] == 0)
{
zeroBits.push_back(input[i]);
}
else
{
oneBits.push_back(input[i]);
}
}
// 确定第column位为1还是0
if (zeroBits.size() <= oneBits.size())// 第column位为0
{
int v =findMissing(zeroBits,column + 1);
return (v << 1) | 0;
}
else
{
int v =findMissing(oneBits,column + 1);
return (v << 1) | 1;
}
}
vector<int> tenToBinary(intn) // 将整数转换为二进制表示
{
vector<int> result(32, 0);// 用32位二进制存储一个整数
/*int index = 31;
while (n != 0)
{
if ((n & 1) == 1) // 若index位为1,则置1
{
result[index] = 1;
}
n = n >> 1;
index--;
} */
for (int index = 31;n != 0; index--, n =n >> 1)
{
if ((n & 1) == 1)// 若index位为1,则置1
{
result[index] = 1;
}
}
return result;
}
- 数组A包含0到n的所有整数,但其中缺了一个,且数组A里的整数都是用二进制形式存储,求这个缺失的整数
- 求整数n的二进制形式
- 递归求解整数数组A[n]的最小整数
- 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次,编写代码找出数组中的某个元素
- 求整数的二进制形式中包含1的个数
- 用递归实现求一个整数的二进制形式
- JS算法:一个长度为n的数组存了1-n这n个整数,打乱顺序后去掉了其中三个,求去掉的三个数。
- 求整数N的二进制形式中1的个数
- 求一个整数数组中第N大的数
- 给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数
- 输出整数n的二进制形式
- 给一个生成0-a的随机整数的函数,如何生成0-b的随机整数? (a,b都是正整数且之间没有关系)
- 【面试题】一个数组a[n-1]缺失了1到n之间的哪个数?
- 这个是用指针实现的将数组a中的n个整数按相反顺序存放
- 求一个32位整数的二进制表示形式
- 史上最全 求一个整数二进制形式中 1 的个数所有算法---未完待续
- 【腾讯面试题】求出这个文件里的整数里不包含的一个整数
- 一个文件中有40亿个整数,求出这个文件里的整数里不包含的一个整数
- 我的Android进阶之旅------>Android使用cmd窗口进行adb logcat时出现中文乱码问题的解决办法
- centos 挂载移动硬盘
- iOS 常见 Crash 及解决方案
- 各国语言Unicode码网站
- [php] 基于ThinkPHP的批量删除
- 数组A包含0到n的所有整数,但其中缺了一个,且数组A里的整数都是用二进制形式存储,求这个缺失的整数
- 深入理解Cookie和Session原理(整理版)
- 杭电1133 Buy the Ticket(大数,递推)
- 安装phpstorm对yii的支持(YiiStorm)
- 解决安卓TextView高度和textSize大小不一致问题
- 常用排序算法/程序员必须掌握的8大排序算法
- 数字旋转方阵
- quick-3.5 打包加密的个人总结
- 事务隔离级别