Редакция для Число вхождений значения
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
1. Идея
Нужно просто посчитать, сколько элементов массива равны числу x.
Для этого достаточно:
- прочитать все
nчисел; - завести переменную
count = 0; - пройти по массиву;
- каждый раз, когда очередной элемент равен
x, увеличиватьcountна 1.
В конце выводим count.
2. Наблюдения
- Нас не интересуют позиции элементов, только их количество.
- Никакая сложная структура данных не нужна.
- Ограничение
n <= 2 * 10^5легко позволяет один линейный проход по массиву. - Значения
a_iиxмогут быть отрицательными, но это никак не влияет на решение: сравнение на равенство работает одинаково для любых целых чисел.
3. Алгоритм
- Считать число
n. - Считать массив из
nцелых чисел. - Считать число
x. - Создать переменную
countи присвоить ей0. - Пройти по всем элементам массива:
- если текущий элемент равен
x, увеличитьcountна 1.
- если текущий элемент равен
- Вывести
count.
4. Почему это работает
Рассмотрим каждый элемент массива по очереди.
- Если элемент равен
x, то он является одним из вхожденийx, и его нужно учесть. Поэтому увеличиваемcount. - Если элемент не равен
x, то он не должен влиять на ответ, и мы ничего не делаем.
Так как мы просматриваем все элементы массива ровно один раз, ни одно вхождение x не будет пропущено.
И наоборот, в count попадут только те элементы, которые действительно равны x.
Значит, после завершения прохода переменная count будет точно равна количеству вхождений числа x в массив.
5. Сложность
- Время:
O(n), потому что массив просматривается один раз. - Память:
O(n)в приведённых решениях, так как элементы сохраняются в массиве или списке.
6. Код на C++17
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
long long *a = new long long[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
long long x;
cin >> x;
int count = 0;
for (int i = 0; i < n; i++) {
if (a[i] == x) {
count++;
}
}
cout << count << '\n';
delete[] a;
return 0;
}
7. Код на Python 3
n = int(input())
a = list(map(int, input().split()))
x = int(input())
count = 0
for value in a:
if value == x:
count += 1
print(count)
Комментарии