Редакция для Минимум массива


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.

1. Идея

Нужно найти минимальный элемент в массиве температур.

Самый простой способ: пройти по всем числам слева направо и поддерживать текущее минимальное значение. Если очередная температура меньше текущего минимума, обновляем ответ.

2. Наблюдения

  • Минимум массива можно найти за один проход.
  • Не нужно сортировать массив, потому что сортировка работает дольше.
  • Так как n >= 1, массив точно не пустой, значит можно взять первый элемент как начальный минимум.
  • Температуры могут быть отрицательными, но это никак не мешает сравнению чисел.

3. Алгоритм

  1. Считываем n.
  2. Считываем температуры.
  3. Запоминаем первый элемент как текущий минимум mn.
  4. Проходим по остальным элементам массива:
    • если текущий элемент меньше mn, то обновляем mn.
  5. Выводим mn.

4. Почему это работает

Изначально mn равен первому элементу массива, то есть является минимумом среди уже просмотренных элементов.

Дальше на каждом шаге рассматривается очередное число:

  • если оно не меньше mn, текущий минимум не меняется;
  • если оно меньше mn, значит теперь именно оно является минимумом среди всех просмотренных элементов.

Таким образом, после обработки всех n элементов в mn будет храниться минимальное значение всего массива.

5. Сложность

  • Время: O(n), потому что каждый элемент массива просматривается ровно один раз.
  • Память:
    • в приведённом решении на C++: O(1), так как элементы можно обрабатывать по одному;
    • в приведённом решении на Python: O(n), так как массив целиком сохраняется в список.

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)

Комментарии

Еще нет ни одного комментария.