Редакция для Минимум массива
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. Идея
Нужно найти минимальный элемент в массиве температур.
Самый простой способ: пройти по всем числам слева направо и поддерживать текущее минимальное значение. Если очередная температура меньше текущего минимума, обновляем ответ.
2. Наблюдения
- Минимум массива можно найти за один проход.
- Не нужно сортировать массив, потому что сортировка работает дольше.
- Так как
n >= 1, массив точно не пустой, значит можно взять первый элемент как начальный минимум. - Температуры могут быть отрицательными, но это никак не мешает сравнению чисел.
3. Алгоритм
- Считываем
n. - Считываем температуры.
- Запоминаем первый элемент как текущий минимум
mn. - Проходим по остальным элементам массива:
- если текущий элемент меньше
mn, то обновляемmn.
- если текущий элемент меньше
- Выводим
mn.
4. Почему это работает
Изначально mn равен первому элементу массива, то есть является минимумом среди уже просмотренных элементов.
Дальше на каждом шаге рассматривается очередное число:
- если оно не меньше
mn, текущий минимум не меняется; - если оно меньше
mn, значит теперь именно оно является минимумом среди всех просмотренных элементов.
Таким образом, после обработки всех n элементов в mn будет храниться минимальное значение всего массива.
5. Сложность
- Время:
O(n), потому что каждый элемент массива просматривается ровно один раз. - Память:
- в приведённом решении на C++:
O(1), так как элементы можно обрабатывать по одному; - в приведённом решении на Python:
O(n), так как массив целиком сохраняется в список.
- в приведённом решении на C++:
6. Код на C++17
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
long long x;
cin >> x;
long long mn = x;
for (int i = 1; i < n; i++) {
cin >> x;
if (x < mn) {
mn = x;
}
}
cout << mn << "\n";
return 0;
}
7. Код на Python 3
n = int(input())
a = list(map(int, input().split()))
mn = a[0]
for i in range(1, n):
if a[i] < mn:
mn = a[i]
print(mn)
Комментарии