Выбор между if и max-min

Сравнение методов обновления переменной

Posted by Jollu8 on March 18, 2024

Сравнение методов обновления переменной в C++

В C++ существует несколько способов обновления значения переменной. В этой статье мы рассмотрим два из них: использование условного оператора if и функции max. В качестве примера мы будем использовать задачу 1732. Find the Highest Altitude из LeetCode.

Задача

Велосипедист начинает свое путешествие с высоты 0 и проходит через n + 1 точек на разной высоте. Нам дан целочисленный массив gain длины n, где gain[i] — это прирост высоты между точками i и i + 1 для всех (0 <= i < n). Наша задача - найти наибольшую высоту, которую достигает велосипедист.

Использование if

Первый подход к решению задачи - использование условного оператора if. Вот пример кода:

1
2
3
4
5
6
7
8
9
int largestAltitude(vector<int>& gain) {
    int h{};
    int sum{};
    for(auto i = 0; i < gain.size() ; ++i) {
        sum += gain[i];
        if(sum > h) h = sum;
    }
    return h;
}

В этом коде мы проверяем, если сумма sum больше текущего максимума h, то обновляем h значением sum.

Использование max

Второй подход к решению задачи - использование функции max. Вот пример кода:

1
2
3
4
5
6
7
8
9
int largestAltitude(vector<int>& gain) {
    int h{};
    int sum{};
    for(auto i = 0; i < gain.size() ; ++i) {
        sum += gain[i];
        h = max(h, sum);
    }
    return h;
}

В этом коде мы просто устанавливаем h равным максимальному значению между текущим h и sum.

Сравнение

С точки зрения производительности, оба подхода эквивалентны, так как оба выполняются за константное время O(1). Выбор между ними обычно зависит от стиля программирования и предпочтений разработчика. Вариант с max может быть более читабельным, так как он явно показывает, что h устанавливается равным максимальному значению.

В заключение, стоит отметить, что использование большого количества условных операторов if в одном цикле может усложнить чтение и понимание кода.