Ссылка на задачу: https://leetcode.com/problems/final-value-of-variable-after-performing-operations/description/
Представим, что есть некоторый язык программирования с всего четырьмя операциями над всего одной переменной x:
++X и X++: инкремент переменной x на 1
—X и X—: декремент переменной x на 1
Начальное значение x равно 0.
Дан массив строк operations, содержащий список операций, необходимо вернуть результирующее значение x после выполнения каждой.
Input:
“—X" | "X++" | "X++” |
---|
Output: 1
Объяснение:
первая операция уменьшает x на 1, значение становится -1
вторая операция увеличивает x на 1, значение становится 0
третья операция увеличивает x еще на 1, значение стало 1
Input:
“++X" | "++X" | "X++” |
---|
Output: 3
Объяснение:
первая операция увеличивает x на 1, значение становится 1
вторая операция увеличивает x на 1, значение становится 2
третья операция увеличивает x еще на 1, значение стало 3
Input:
“X++" | "++X" | "—X" | "X—” |
---|
Output: 0
Объяснение:
первая операция увеличивает x на 1, значение становится 1
вторая операция увеличивает x на 1, значение становится 2
третья операция уменьшает x на 1, значение становится 1
четвертая операция уменьшает x еще на 1, значение стало 0
1 <= operations.length <= 100
operations[i] может быть либо “++X”, либо “X++”, либо “—X”, либо “X—“
Решение “в лоб”. Единоразовая итерация по массиву и изменение изначально инициализированной нулем переменной x соответствующим образом в зависимости от текущего элемента operations.
Алгоритм:
Инициализируем x нулем
Итерируемся по массиву 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)
В данном решении нет никаких дополнительных объектов, под которые выделяется память (сама целочисленная искомая переменная не учитывается).