/*******************************************************************************
文 件 名 : test100.cpp
实现功能 : 微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字补充下题目 意思:我这里每个数字 都是个阿拉伯数字,是1位的,是1到9之间的但是有1百万个这样的数字 比如 12345678912 是11个这样的数字
实现思路 : 定义9个数组,记录1-9的出现的数字做标记,出现一次则,对应数组加1,超过2次,在下次循环直接结束,这样一共直到记录8个数字后,直接打印第9个数字,就是一共只会出现2次的数字了
作    者 : jernymy
版    权 : <Copyright(C) ... jernymy.>
日    期 : 2011-07-28
版    本 : V1.0
*******************************************************************************/#include "stdio.h"
#include "stdlib.h"  // srand
#include "time.h"    // time
#include "string.h"  // memset// 最大的数据是100万, 1000000
#define MAX_NUM  1000*1000// 出现频率的个数
#define OVER_VAR  2// 记录1-9这几个数字出现的次数,是否出现超过2次,
// 如果超过2次可以不用判断,初始化为0
unsigned char g_abyNumAry[10];// 记录总共出现超过3次的数字的个数,当超过7个时,即为8时。
// 则可以直接打印出没有出现超过2次的那个数字,就一定是公出现2次的数字了。
unsigned char g_nCount = 0;int main(void)
{int nIdx;int nData;time_t nCurTime; srand(time(&nCurTime));memset(g_abyNumAry, 0, sizeof(g_abyNumAry));for (nIdx = 0; nIdx < MAX_NUM; nIdx++){nData = rand()%9 + 1; // 随机数从1到9,测试专用,jernymy from 1-9printf("%d ", nData); // 打印该随机数字// 此数字出现次数大于2次,则退出次循环if (g_abyNumAry[nData] > OVER_VAR){continue;}// 此数字出现1次,在大于2次时,就对总个数加1if (++g_abyNumAry[nData] > OVER_VAR){g_nCount++;}// 当有8个数字出现的个数均超过2次,// 那么剩下的那个数字一定就是要求的了if (g_nCount == 8){printf("\nfound only 2 num: ");for (nIdx = 1; nIdx < 10; nIdx++){if (g_abyNumAry[nIdx] < (OVER_VAR+1)){// jernymy 此数就是我们要找的那个了printf("%d\n", nIdx);}}break;}    }return 0;
}

微软面试题:有100万个数字(1到9),其中只有1个数字重复2次,如何快速找出该数字相关推荐

  1. 快速找出数组中出现次数超过一半的数字

    "只要不是特别大的内存开销,时间复杂度比较重要.因为改进时间复杂度对算法的要求更高." --吴斌(NVidia,Graphics Architect) 同样是查找,如果是顺序查找需 ...

  2. 找出那个数字出现3次的数字

    找出那个数字出现3次的数字,简单的C++ #include <stdio.h> #define COUNT 3 #define ARRAY_SIZE(_) (sizeof (_) / si ...

  3. 快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值

    我觉得写得很清晰,希望没有侵犯作者的著作权,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一个数组中的两个数字,让这 ...

  4. 搜寻吉祥数,在给定的范围内,例如1~99999,找出吉祥数字,满足的条件为:全部数字必须由6或者8构成,如66666,66668,668,…

    题目:在给定的范围内,例如1~99999,找出吉祥数字,满足的条件为:全部数字必须由6或者8构成,如66666,66668,668,- 1.一开始想的很杂,考虑了效率:把要查找的数转化成String再 ...

  5. java编程找出吸血鬼数字,Java 找到四位数的所有吸血鬼数字 基础代码实例

    Java 找出四位数的所有吸血鬼数字 基础代码实例 /** * 找出四位数的所有吸血鬼数字 * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最 ...

  6. bat从数组中找出相同数字并删除_找到所有数组中消失的数字

    题目描述 给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. ...

  7. bat从数组中找出相同数字并删除_全网把Map中的hash()分析的最透彻的文章,别无二家...

    原文地址:https://mp.weixin.qq.com/s/qCHkzs4JPOipB-ZzqrfbeQ 作者: Hollis 你知道HashMap中hash方法的具体实现吗? 你知道HashTa ...

  8. string 找出所有数字 index_【一天一大 lee】单调递增的数字 (难度:中等) Day20201215...

    20201215 题目: 给定一个非负整数  N,找出小于或等于  N  的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增. (当且仅当每个相邻位数上的数字  x  和  y  满足   ...

  9. java编程找出吸血鬼数字,找出四位數的所有吸血鬼數字(JAVA)

    /** * 找出四位數的所有吸血鬼數字 * 吸血鬼數字是指位數為偶數的數字,可以由一對數字相乘而得到,而這對數字各包含乘積的一半位數的數字,其中從最初的數字中選取的數字可以任意排序. * 以兩個0結尾 ...

最新文章

  1. JavaScript多线程之HTML5 Web Worker
  2. hadoop环境搭建之伪分布集群环境搭建(单节点)
  3. 使用Python解压zip、rar文件
  4. ta是什么职位_想好了吗~你为什么来博智林
  5. CLOUD配置审批流发消息
  6. java 接口api设计的注意事项_Java接口设计原则
  7. 蚂蚁集团:中签号码共有701696个
  8. python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解
  9. 初识TensorFlow
  10. 2014清华计算机系直博名单,2014年清华大学外校推免名单.pdf
  11. docker 重启gitlab_gitlab从入门到绝望
  12. matlab无法复制图形到剪切板,cad图纸无法复制到剪贴板如何解决
  13. 从0到1搭建kubernetes集群
  14. outlook自动保存html,outlook怎么编辑HTML源文件
  15. 在docker里跑gpgpusim
  16. 怎么才能有写程序的思路
  17. 基于javaweb的酒店管理系统(java+ssm+layui+mysql)
  18. cxzday8-字符串作业
  19. 【如何成为SQL高手】第二关:表记录的插入、更新、删除
  20. Swing错鸡包 特殊历史脚本

热门文章

  1. 盛严谨,严谨,再严谨。_评估员工调查的统计严谨性
  2. 物种分布模型_减少物种分布建模中的空间自相关
  3. kfc流程管理炸薯条几秒_炸薯条成为数据科学的最后前沿
  4. 可视化 nlp_使用nlp可视化尤利西斯
  5. 深入理解InnoDB(3)—索引的存储结构
  6. drop sql语句_用于从表中删除数据SQL Drop View语句
  7. 通过小程序给公众号传递消息_多输入现场消息传递应用程序概念
  8. python:封装连接数据库方法
  9. opencv python运动人体检测
  10. linux_svn命令操作