条件:时间复杂度是O(n),空间复杂度是O(1)
方法1:标记法
int[] arr = { , , , , , , , , , , , , , };
int len = arr.Length;
int[] c = new int[len];
int i = ;
for (i = ; i < len; i++)
{
c[i] = ;
} for (i = ; i < len; i++)
{
c[arr[i]]++;
} for (i = ; i < len; i++)
{
if (c[i] > len / )
{
Console.WriteLine(i);
break;
}
}
最后是百度出来方法:我觉得有错,但是很多人都是这么写
int A = ;
int B = ; foreach (var item in arr)
{
if (A == item)
{
B++;
}
else
{
if (B == )
{
A = item;
}
else
{ B--;
}
} }
举一反三:如果求是任意数组出现次数最多数字
很简单,在方法1基础上改改
加多一个for循环,具体代码,各位自行去实现