// 程序员面试题精选100题(47)-数组中出现次数超过一半的数字.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
/*
this method is terrific which can avoid creating an array
*/
int mostvalue(int *arr,int n)//suppose the input is valid,
{
int times=1,curvalue;
if (n<=0)
{
return -1;
}
curvalue=arr[0];
for (int i=1;i<n;i++)
{
if (times==0)
{
curvalue=arr[i];//reset current value
times=1;
}
else
{
if (arr[i]==curvalue)
{
times++;
}
else
{
times--;
}
}
}
times = 0;
for(int i = 0; i < n; ++i)// judge the invalidation of the inputs
{
if(arr[i] == curvalue)
times++;
}
if(times * 2 <= n)
{
return -1;
}
return curvalue;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cin>>n;
int *arr = new int[n];
for (int i=0;i<n;i++)
{
cin>>arr[i];
}
cout<<mostvalue(arr,n)<<endl;
system("pause");
return 0;
}
用次数统计不用建立数组来标记了,是个好想法,问题是怎么想到呢?
程序员面试题精选100题(47)-数组中出现次数超过一半的数字
最新推荐文章于 2016-07-06 17:10:57 发布