一、题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

二、输入描述

输入一个数组

三、输出描述

超过数组长度的一半的数,如果没有输出0

四、牛客网提供的框架

class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) { }
};

五、解题思路

这是2013年腾讯招聘题目。以下是《王道求职宝典》的方法:

1)初始化:设当前的数组为data[],数组的长度为n。currentAxis=data[0],currentNum=1;

2)设i=1,遍历数组,转向3;

3)当data[i]==currentNum==0时,currentNum++,转向5;否则转向4;

4)currentNum–,当currentNum==0时,currentAxis=data[i];

5)当i==data.length时,转向(6);否则i++,转向3;

6)再次遍历数组中值为currentAxis的个数是否超过数组长度的一半;转向7;

7)如果是输出currentAxis,否则输出0;

六、代码

#include<iostream>
#include<vector> using namespace std; class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.size() < 1) return 0;
if(numbers.size() == 1) return numbers[0];
int numCount = 1;
int temp = numbers[0]; for(int i = 1; i < numbers.size(); i++)
{
if(numCount <= 0){temp = numbers[i]; numCount = 1;}
if(numbers[i] == temp) numCount++;
else numCount--;
} int num = 0; //检查值为temp的个数是否超过数组长度的一半
for(int i = 0; i < numbers.size(); i++)
{
if(numbers[i] == temp) num++;
}
if(numCount > 0 && num > numbers.size()/2) return temp;
else return 0; }
};

最新文章

  1. CRM Setstate plugin
  2. mysql explain 命令讲解
  3. linux运维工程师
  4. jsp日期控件My97DatePicker的使用
  5. Apache log4cxx用法
  6. UVA - 10129 Play on Words(欧拉回路+并查集)
  7. poj1799---解析几何
  8. ibatis配置log4j输出sql日志信息
  9. oracle排序的几种方法
  10. 【Python】正则表达式re
  11. APP测试要点—UI、功能测试
  12. 从CAP理论中分析Eureka与zookeeper的区别
  13. 【Android】Android 广播大全
  14. 推荐一个spring cloud 学习路线,绝对合理化
  15. linux下recv 、send阻塞、非阻塞区别和用法
  16. sql server与C#中的字符串相等等效写法
  17. SimpleDateFormat转换时间,12,24时间格式[转]
  18. 人工智能——Singleton模式
  19. js简单的面试题
  20. Python import搜索的路径顺序

热门文章

  1. 洛谷P4015 运输问题(费用流)
  2. P3图片导致iOS9.3以下崩溃问题
  3. C#获取URL参数值
  4. CodeIgniter 相关资源
  5. OpenGL编程(八)3D数学与坐标变换
  6. GCC中的强符号和弱符号及强引用和弱引用
  7. 【AnjularJS系列4 】 — 单个页面加载多个ng-App
  8. 激情世界杯,盛夏大放价,CDR 618返场继续嗨
  9. Pyhton学习——Day7
  10. NOIP 2017 时间复杂度 (模拟)