题目:输入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