1)注意到a[i] < n,故考虑桶排序。初始化一个数字b[n],其中b[val] = 值为val的元素出现的次数。遍历a来统计b,若次数>n/2,则返回val。
2)代码
int zhao(int a[], int n)
{
int b[n];
for (int i = 0; i < n; i ++ ) b[i] = 0;
for (int i = 0; i < n; i ++ )
{
b[a[i]] ++;
if (b[a[i]] > n / 2) return a[i];//根据题目意思,主元素最多一个,故找到可直接返回,不用完全遍历
}
return -1;
}
3)时间复杂度On,空间复杂度On