← Назад

2011.Final Value of Variable After Performing Operations

Ссылка на задачу: https://leetcode.com/problems/final-value-of-variable-after-performing-operations/description/


массивы

easy


Описание

Представим, что есть некоторый язык программирования с всего четырьмя операциями над всего одной переменной x:

Начальное значение x равно 0.

Дан массив строк operations, содержащий список операций, необходимо вернуть результирующее значение x после выполнения каждой.


Примеры

Пример 1

Input:

“—X""X++""X++”

Output: 1

Объяснение:

Пример 2

Input:

“++X""++X""X++”

Output: 3

Объяснение:

Пример 3

Input:

“X++""++X""—X""X—”

Output: 0

Объяснение:


Ограничения


Решение

Решение “в лоб”. Единоразовая итерация по массиву и изменение изначально инициализированной нулем переменной x соответствующим образом в зависимости от текущего элемента operations.

Алгоритм:

  1. Инициализируем x нулем

  2. Итерируемся по массиву operations и, в зависимости от значения текущего элемента либо увеличиваем, либо уменьшаем x на 1

Код:

python

class Solution:
    def finalValueAfterOperations(self, operations: List[str]) -> int:
        value = 0
        for op in operations:
            if op == "--X" or op == "X--":
                value -= 1
            else:
                value += 1
        return value

C++

class Solution {
public:
    int finalValueAfterOperations(vector<string>& operations) {
        int x = 0;
        for (const string& op : operations) {
            if (op.front() == '-' || op.back() == '-') {
                --x;
            } else {
                ++x;
            }
        }
        return x;
    }
};

Сложность алгоритма по времени - O(N)

Имеем один цикл для перебора всех элементов массива operations размера N.

Сложность алгоритма по памяти - O(1)

В данном решении нет никаких дополнительных объектов, под которые выделяется память (сама целочисленная искомая переменная не учитывается).