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

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

如果有一个数出现的次数超过一半,那他出现的次数肯定比其他数字出现次数的和还要多,这时可以遍历数组并保存两个值,一个是出现的数字,一个是次数,当下一个数字和保存的数字相同时,次数加1,如果不同,次数减1,如果次数为0,我们需要保存下一个数字,并将次数设为1。最后保存的数字即为所求。同时考虑空数组和没有出现次数超过一半的情况。

class Solution {public:    int MoreThanHalfNum_Solution(vector
numbers) { if(numbers.empty()) return 0; else{ int res=numbers[0]; int times=1; for(int i=1;i

基于Partition函数的O(n)算法

类似快排,选定一个基准,比它小的都在左边,比它大的都在右边,比如如果它的下标小于n/2,那中位数应该位于右边,继续在右边查找。这样就可以找出超过一半的数。

int Partition(int data[],int length,int start,int end){    int index=RandomInRange(start,end);    swap(data[index],data[end]);    int small=start-1;    for(index=start;index
>1; int start=0; int end=length-1; int index=Partition(numbers,length,start,end); while(index!=middle){ if(index>middle){ end=index-1; index=Partition(numbers,length,start,end); } else{ start=index+1; index=Partition(numbers,length,start,end); } } int result=numbers[middle]; if(!CheckMoreThanHalf(numbers,length,result) result=0; return result;}
CheckInvalidArray函数检查数组是否合法,CheckMoreThanHalf函数检查所得数字是否符合要求

转载于:https://www.cnblogs.com/nickqiao/p/7583348.html

你可能感兴趣的文章
shell if [ -f .... ]
查看>>
djagon实战form数据库等操作
查看>>
ISIS的高级属性
查看>>
How To系列(二):how to baidu dork
查看>>
Nginx %00空字节执行任意代码(php)漏洞
查看>>
WordPress主题目录结构说明
查看>>
(总结)Nginx使用的php-fpm的两种进程管理方式及优化
查看>>
启动APACHE出现“error while loading shared libraries: libiconv.so.2”
查看>>
MFS文件系统安装指南
查看>>
查询dsjob
查看>>
Oracle与SQL Server互连
查看>>
JavaScript颜色选择器插件
查看>>
区块链和电子商务 | 大规模电子购物
查看>>
深入理解Fsync
查看>>
c++构造函数详解
查看>>
定制 LAMP 网站服务平台
查看>>
shell中数字计算方法(bc/expr/$(())/let/awk)
查看>>
关于CDH6的一些介绍
查看>>
bzoj 2456: mode
查看>>
windows 2008下无法改变文件(文件夹)权限时,可以看一下其所有者
查看>>