微软100题(74)数组中超过长度一半的数字
2015-06-10 20:45
176 查看
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都
曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,
除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。
思路:遍历数组时候保存两个值,一个是数组中的数字,一个是次数。当遍历到下一个数字时候,如果和保存的数字相同,次数加一,如果不同,次数减一,当次数为零时,保存的数字要替换,并且置次数为1
分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都
曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,
除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。
思路:遍历数组时候保存两个值,一个是数组中的数字,一个是次数。当遍历到下一个数字时候,如果和保存的数字相同,次数加一,如果不同,次数减一,当次数为零时,保存的数字要替换,并且置次数为1
bool CheckMoreThanHalf(int* number,int length,int result) { int cnt =0; for (int i=0;i<length;++i) { if(number[i]==result) cnt++; } if(cnt*2>length) return true; return false; } int MoreThanHalfNumber(int* number,int length) { if(number==NULL || length <=0) return -1; int result = number[0]; int times = 1; for (int i=1;i<length;++i) { if(times==0) { result = number[i]; times = 1; } else if(number[i]==result) times++; else times--; } if(!CheckMoreThanHalf(number,length,result)) result = -1; return result; }
相关文章推荐
- 常见的MySQL Replication Error
- java匿名内部类
- [LeetCode]Integer to Roman整数转罗马数字
- Spark学习笔记:(一)入门 glance
- 无法连接mysql,请检查mysql是否已启动及用户密码是否设置正确
- [.net程序员必看]微软新动向之Android和IOS应用 visual studio 2015 Cordova[原创]
- 包含min函数的栈
- 获取导航栏,状态栏,标签栏的高度
- POJ 2125 Destroying The Graph 二分图最小点权覆盖 最小割
- Chrome rem bug
- 高程拾取器App上线
- 基于FPGA的双口RAM设计方法
- HDU 4998
- Android IllegalStateException: Fragment not attached to Activity
- 模式识别:k-均值聚类算法的研究与实现
- MySQL 数据(数据库)迁移
- HDU 1013 Digital Roots
- java发送http的get、post请求
- 顺时针打印矩阵
- Java正则表达式