Вам дан массив из n целых чисел только для чтения. Узнайте, встречается ли какое-либо целое число более n / 3 раз в массиве за линейное время и постоянное дополнительное пространство.
Если да, вернуть целое число. Если нет, верните -1.
Если существует несколько решений, верните любое.
Пример:
Input : [1 2 3 1 1]
Output : 1
1 встречается 3 раза, что больше 5 / 3 раза.
Я решил эту проблему и нашел несколько решений в Google. Но мне нужен побитовый подход. Если бы вы могли мне помочь, я был бы признателен.
Решение без побитового:
int Solution::repeatedNumber(const vector<int> &A)
{
int len = A.size();
if (A.size() == 0)
{
return -1;
}
if (A.size() == 1)
{
return A[0];
}
int c1 = A[0];
int c2 = A[1];
int c1count = 0;
int c2count = 0;
for(int num: A)
{
if(c1 == num)
{
c1count++;
}
else if(c2 == num)
{
c2count++;
}
else if(c1count == 0)
{
c1 = num;
c1count = 1;
}
else if(c2count == 0)
{
c2 = num;
c2count = 1;
}
else
{
c1count--;
c2count--;
}
}
c1count = 0;
c2count = 0;
for(int num : A)
{
if(c1 == num)
{
c1count++;
}
else if(num == c2)
{
c2count++;
}
}
if(c1count > len/3)
{
return c1;
}
else if(c2count > len/3)
{
return c2;
}
else
{
return -1;
}
}