原题:
"OK, you are not too bad, em... But you can never pass the next test." feng5166 says.
"I will tell you an odd number N, and then N integers. There will be a special integer among them, you have to tell me which integer is the special one after I tell you all the integers." feng5166 says.
"But what is the characteristic of the special integer?" Ignatius asks.
"The integer will appear at least (N+1)/2 times. If you can't find the right integer, I will kill the Princess, and you will be my dinner, too. Hahahaha....." feng5166 says.
Can you find the special integer for Ignatius?
题意:
给出n个数字n为奇数,要找出在这串数字中出现至少(n+1)/2次的数
题解:
这个题是杭电的题,之前做过一次,直接把代码复制过来了。最开始的时候想直接把数组排序,然后输出中间的一个就行,结果超时,后来是当时看了一篇别人的博客,用一个类似于哈希表的数组来计数。每输入一个num,则A【num】++,直到找到一个A【num】>mid的数字,则这个数字就是要求的数字,边输入边记录,不超时。
代码:AC
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int arr[999999];
bool less(int A,int B)
{
return A>B;
}
int main()
{
int n;
while(cin>>n)
{
memset(arr,0,sizeof(arr));
int num;
int mid=(n+1)/2;
int tar;
while(n)
{
cin>>num;
arr[num]++;
if(arr[num]>=mid)
{
tar=num;
}
n--;
}
cout<<tar<<endl;
}
return 0;
}
本文解决了一个算法问题,即从一组奇数个元素的数组中,找出至少出现(n+1)/2次的特殊整数。通过使用类似哈希表的数组进行计数,边输入边记录,有效避免了超时问题。

387

被折叠的 条评论
为什么被折叠?



