《剑指offer》第五十六题(数组中唯一只出现一次的数字)
// 面试题56(二):数组中唯一只出现一次的数字
// 题目:在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。请
// 找出那个吃出现一次的数字。 #include <iostream> int FindNumberAppearingOnce(int numbers[], int length)
{
if (numbers == nullptr || length <= )//边界判断
throw new std::exception("Invalid input."); int bitSum[] = { };//开辟一个32长的辅助空间
for (int i = ; i < length; ++i)//对数组的每个数字
{
int bitMask = ;
for (int j = ; j >= ; --j)//对每个数字的每一位
{
int bit = numbers[i] & bitMask;//检测numbers[i]的最后一位是0还是1
if (bit != )//如果为1,bitSum[j]加1,否则不用动
bitSum[j] += ; bitMask = bitMask << ;//把检测的这个标杆,左移1位,不右移原数据是怕破坏原数据吧
}
} int result = ;
for (int i = ; i < ; ++i)
{
result = result << ;//左移1位,代表乘2
result += bitSum[i] % ;//对每一位取余,重复3个的数字都会滤掉,并和之前计算的相加
} return result;
} // ====================测试代码====================
void Test(const char* testName, int numbers[], int length, int expected)
{
int result = FindNumberAppearingOnce(numbers, length);
if (result == expected)
printf("%s passed.\n", testName);
else
printf("%s FAILED.\n", testName);
} // 所有数字都是正数,唯一的数字是最小的
void Test1()
{
int numbers[] = { , , , , , , };
int expected = ;
Test("Test1", numbers, sizeof(numbers) / sizeof(int), expected);
} // 所有数字都是正数,唯一的数字的大小位于中间
void Test2()
{
int numbers[] = { , , , , , , };
int expected = ;
Test("Test2", numbers, sizeof(numbers) / sizeof(int), expected);
} // 所有数字都是正数,唯一的数字是最大的
void Test3()
{
int numbers[] = { , , , , , , };
int expected = ;
Test("Test3", numbers, sizeof(numbers) / sizeof(int), expected);
} // 唯一的数字是负数
void Test4()
{
int numbers[] = { -, , , };
int expected = -;
Test("Test4", numbers, sizeof(numbers) / sizeof(int), expected);
} // 除了唯一的数字,其他数字都是负数
void Test5()
{
int numbers[] = { -, , -, - };
int expected = ;
Test("Test5", numbers, sizeof(numbers) / sizeof(int), expected);
} // 重复的数字有正数也有负数
void Test6()
{
int numbers[] = { , -, , -, , -, };
int expected = ;
Test("Test6", numbers, sizeof(numbers) / sizeof(int), expected);
} // 所有数字都是负数
void Test7()
{
int numbers[] = { -, -, -, - };
int expected = -;
Test("Test7", numbers, sizeof(numbers) / sizeof(int), expected);
} // 唯一的数字是0
void Test8()
{
int numbers[] = { -, , , -, , -, };
int expected = ;
Test("Test8", numbers, sizeof(numbers) / sizeof(int), expected);
} // 除了唯一的数字,其他数字都是0
void Test9()
{
int numbers[] = { , , , , , , , };
int expected = ;
Test("Test9", numbers, sizeof(numbers) / sizeof(int), expected);
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5();
Test6();
Test7();
Test8();
Test9();
system("pause");
return ;
}
《剑指offer》第五十六题(数组中唯一只出现一次的数字)的更多相关文章
- 《剑指offer》第二十六题(树的子结构)
// 面试题26:树的子结构 // 题目:输入两棵二叉树A和B,判断B是不是A的子结构. #include <iostream> struct BinaryTreeNode { doubl ...
- 《剑指offer》第十六题(数值的整数次方)
// 面试题:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需要考 ...
- 剑指Offer(二十六):二叉搜索树与双向链表
剑指Offer(二十六):二叉搜索树与双向链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ ...
- 剑指Offer(三十六):两个链表的第一个公共结点
剑指Offer(三十六):两个链表的第一个公共结点 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 剑指Offer(三十四):第一个只出现一次的字符
剑指Offer(三十四):第一个只出现一次的字符 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
- 剑指Offer - 九度1384 - 二维数组中的查找
剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...
- 《剑指Offer》面试题-二维数组中的查找
题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7318 解决:1418 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到 ...
- 剑指offer【01】- 二维数组中的查找(Java)
在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有. 而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了.剑指offer应对面试中的 ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- 【Java】 剑指offer(56-2) 数组中唯一只出现一次的数字
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次. ...
随机推荐
- H5+JS生成验证码
效果图如下: <canvas id="canvas1" style="margin-left: 200px;"></canvas>< ...
- Introduction to the Standard Directory Layout
Having a common directory layout would allow for users familiar with one Maven project to immediatel ...
- mybatis 3.2.*打印sql结果集
虽然可以写个interceptor记录下,但是总归没有log4j来的自然.一段时间不查问题,总是要忘了,记录下: 在mybatis 3.2.*中,可以在log4j中如下配置: log4j.logger ...
- nlp homework 03
NLP Homework 03 --冯煜博 题目描述 (盒子和球模型)假设有3个盒子,每个盒子里装有红白两种颜色的球,盒子里的红白球有下表列出,初始状态分布. 解答 1. 给出HMM模型 \(\mu= ...
- mint-ui之Loadmore使用
<template> <div class="page-loadmore"> <div class="page-loadmore-wrapp ...
- svg动态添加小人
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 对客户端攻击:adobe_toolbutton
对客户端攻击:adobe_toolbutton 漏洞简介 远程攻击者可以利用漏洞执行任意指令.当用户打开特定pdf就可以触发payload. 实践过程 输入命令use exploit/windows/ ...
- 【专家坐堂Q&A】在 petalinux-config 中选择外部来源时,可将符号链路添加内核来源目录树
问题描述 作为 petalinux-config 菜单的一部分,现在可以将 Linux 内核指定为外部来源. 如果选择了该选项,可为内核来源目录树添加两个符号链路. 这会带来两个问题: 1. 符号链路 ...
- NOIP模拟题 2017.11.6
题目大意 给定一个大小为n的数组,从中选出一个子集使得这个子集中的数的和能被n整除. 假设开始我没有做出来,那么我就random_shuffle一下,然后计算前缀和,有一个能被n整除,就输出答案.于是 ...
- Codeforces 822D My pretty girl Noora - 线性筛 - 动态规划
In Pavlopolis University where Noora studies it was decided to hold beauty contest "Miss Pavlop ...