博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题26:数组中出现次数超过一半的数字
阅读量:7172 次
发布时间:2019-06-29

本文共 1059 字,大约阅读时间需要 3 分钟。

方法一:先对数组进行排序,再遍历排序后的数组,统计每个数的次数,出现次数最大的数即为要找的数

时间复杂度  O(nlogn) + O(n) = O(nlogn)

不需要额外存储空间

方法二:先对数组进行排序,出现次数超过数组长度的一半的数必然是数组中间的那个数

时间复杂度O(nlgn)+ O(1)= O(nlgn)

不需要额外存储空间

方法三:不排序扫描一遍数组,每次删除两个不同的数,最终得到那个数即为要找的数

时间复杂度On

空间复杂度O(1) 

代码:

 

#include "stdafx.h"#include 
using namespace std;//找出数组中出现次数超过一半的数字,找到则返回true,否则返回faslebool FindHalfCountNum(int nArr[], int nLength, int &nNum){ if (nArr==NULL || nLength<=0) { return false; } int nCandidate = nArr[0]; int nCount = 1; for (int i=1; i
nLength) { return true; } else { cout << "数组中不存在次数超过一半的数字!" << endl; return false; }}int _tmain(int argc, _TCHAR* argv[]){ int nNum = 0; int nArr1[9] = {1,2,3,2,2,2,5,4,2}; if (FindHalfCountNum(nArr1, 9, nNum)) { cout << "数组中出现次数超过一半的数字为:" << nNum << endl; } int nArr2[9] = {1,2,3,2,8,2,5,4,2}; if (FindHalfCountNum(nArr2, 9, nNum)) { cout << "数组中出现次数超过一半的数字为:" << nNum << endl; } int nArr3[1] = {1}; if (FindHalfCountNum(nArr3, 1, nNum)) { cout << "数组中出现次数超过一半的数字为:" << nNum << endl; } system("pause"); return 0;}

运行结果:

 

 

你可能感兴趣的文章
为什么要进行项目总结呢?又如何进行项目总结呢?
查看>>
iOS——重写Cell分割线
查看>>
window与linux下,php的redis扩展安装
查看>>
VirtualBox虚拟机网络设置
查看>>
Mongodb 之 安全权限控制
查看>>
httpclient发送网络请求
查看>>
可自动切换登录不同系统测试实例
查看>>
jQuery Validate
查看>>
Building IKEv1 and IKEv2 on CentOS 7
查看>>
Zabbix server is not running:zabbix access denied
查看>>
我的友情链接
查看>>
linux下的软硬链接
查看>>
【JAVA的 IO流之FileInputStream和FileOutputStream】
查看>>
远程连接mysql 授权方法详解
查看>>
FreeBSD网络配置
查看>>
@synthesize window=_window; 的理解
查看>>
Greenlet理解要点
查看>>
罗森伯格应邀主讲CDCC百家大讲堂38期
查看>>
How to Install Nextcloud 13 Server on Debian 9
查看>>
[深入理解文件系统之一] IO系统调用
查看>>