数组中出现次数一半以上的数
在数组中找到出现次数大于一半的数
http://www.nowcoder.com/questionTerminal/6a406a24b2a14954956a2168e7f42f9d
消消乐解法:
每当与之前一个相等 count++
每当与之前一个不等 count--
若当前count==0 那么新来的作为全新Num count=1
int main()
{
int n;
cin>>n;
vector<int> arr(n);
for(int i=0;i<n;i++)
cin>>arr[i]; //输入
int num=arr[0];
int ans=1;
//假定那个数为arr[0]
for(int i=1;i<n;i++)
{
if(ans==0) //转变新的num
{
num=arr[i];
ans++;
continue;
}
if(arr[i]==num)
{
ans++;
}
else
{
ans--;
}
}
int count=0;
for(int i=0;i<n;i++)
if(arr[i]==num)
count++;
if(count>n/2)
cout<<num<<endl;
else
cout<<-1<<endl;
}
查看9道真题和解析