输入n个整数,输出出现次数大于等于数组长度一半的数

 

题目:输入n个整数,输出出现次数大于等于数组长度一半的数

输入描述:
NOWCODER.COM
牛客网·互联网名企笔试/面试题库
牛客出品-http://www.nowcoder.com
每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。
输出描述:
输出出现次数大于等于n/2的数。
示例1:
输入
3 9 3 2 5 6 7 3 2 3 3 3
输出
3

分析:

方法(1):排序,中间那个数就是.

方法(2):对每个元素出现的次数做统计(统计次数的数组的大小:最大元素-最小元素)当然对于本题已知一共不到100个元素,可以直接开100个空间,并且count数组不用相对位置更简单

方法(3):我们可以分析,一个数出现次数超过一半,那么剩下所有元素出现次数之和小于一半,那么我们遍历数组的时候,保存两个值,一个元素,一个是次数,当遍历到下一个元素时,如果和当前元素相同,就将次数加1,否则将次数减1,如果次数被减到0,那么需要保存下一个数字并且将此时的次数置为1,这样下去,最后保存的数字一定是出现次数最多的那个数字(因为次数小于一般的其它元素将会抵消一部分次数大于一半的,但是次数大于一半的那个数字终究会剩一部分出来,这部分至少是1)。

int more_half_count1(vector<int>& v)
{
	sort(v.begin(), v.end());//默认升序
	r
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值