// 程序员面试题精选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-08-02 22:06:00 发布
本文介绍了一种高效算法,用于从数组中找出出现次数超过一半的数字,该方法不使用额外数组,通过遍历计数减少空间复杂度。
93

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



