Patrice T
Цитата:
Я не совсем понимаю, что здесь означает "два сравнения".
using namespace std;
int FindDuplicate(vector<int>& nums)
{
int count = 1, marked = 0;
for (int i = 0; i < nums.size(); i++) // Here is a comparison
{
if (nums[i + 1] == nums[marked]) // Here is a comparison
{
count++;
if (count == 5) // Here is a comparison
return nums[marked];
}
else
{
marked = i + 1;
count = 1;
}
}
return 0;
}
Предположим, что вектор содержит значение, повторенное 5 раз, 2 первых сравнения выполняются от 5 до 10 раз, третье выполняется 5 раз. Что в общей сложности составляет от 15 до 25 сравнений для этого кода.
Ваш код проверяет, повторяется ли значение 5 раз, прежде чем ответить на вопрос, что это за значение. Вас не просят проверить, есть ли значение, повторенное 5 раз или нет, это знание.
Вас просто просят найти, какой именно. И Вам разрешено 2 сравнения.
[Обновление]
Цитата:
вопрос от geeksforgeeks.com
Вопрос выглядит как небольшой вызов, но при тщательном анализе вы можете обнаружить, что 1 сравнения достаточно, чтобы знать ответ.
[Обновление для Chill60]
Chill60 писал:
Избавь меня от страданий, пожалуйста.
Конечно. Вам просто нужно сделать визуальный анализ.
если вектор есть
9 элементы, они выглядят как:
1 1 1 1
1 2 3 4 5
1 2 3 4
5 5 5 5 5
return nums[4];
это ответ, никакого теста не требуется, потому что элемент 4 всегда находится в повторяющемся значении.
если вектор есть
10 элементы, они выглядят как:
1 1 1
1 1 2 3 4 5 6
1 2 3
4 4 4 4 4 5 6
1 2 3
4 5 5 5 5
5 6
1 2 3
4 5 6 6 6
6 6
if (nums[3]==nums[4])
return nums[4]; // nums{3] is also the answer
else
return nums[8];
если тест провалится, ответом будет элемент 8.
Тот же ответ подходит для вектора размером до 13:
1 2 3
4 5 5 5 5
5 6 7 8 9
1 2 3
4 5 6 7 8
9 9 9 9 9
Member 13192781
Итак, сравнение просто означает, что я использую булев оператор для сравнения двух величин. В моем коде, поскольку я использовал цикл, я сравниваю одни и те же величины несколько раз и, следовательно, нарушил требование вопроса. В этом есть смысл. Большое вам спасибо за вашу помощь.