求整数数组(长度为n),出现大于2/n次数的数字

时间:2023-03-09 06:48:34
求整数数组(长度为n),出现大于2/n次数的数字

条件:时间复杂度是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循环,具体代码,各位自行去实现