From ca5b4c5d510c1d0c1251b2a750c659872c561de2 Mon Sep 17 00:00:00 2001 From: Daniel Ghenov <47058577+Daniel-Ghenov@users.noreply.github.com> Date: Mon, 11 Nov 2024 23:37:37 +0200 Subject: Add files via upload --- Practicum/pract06/solutions/Task 02.cpp | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Practicum/pract06/solutions/Task 02.cpp (limited to 'Practicum/pract06/solutions/Task 02.cpp') diff --git a/Practicum/pract06/solutions/Task 02.cpp b/Practicum/pract06/solutions/Task 02.cpp new file mode 100644 index 0000000..6009d36 --- /dev/null +++ b/Practicum/pract06/solutions/Task 02.cpp @@ -0,0 +1,48 @@ +#include +#include +#include + +class Solution +{ +public: + std::vector asteroidCollision(std::vector &asteroids) + { + std::stack stack; + + for (int i = 0; i < asteroids.size(); ++i) + { + if (asteroids[i] > 0 || (stack.size() && stack.top() < 0)) + { + stack.push(asteroids[i]); + continue; + } + + bool addNeg = true; + while (stack.size() && stack.top() > 0 && stack.top() + asteroids[i] <= 0) + { + if (stack.top() + asteroids[i] == 0) + { + stack.pop(); + addNeg = false; + break; + } + stack.pop(); + } + + if (addNeg && (stack.empty() || stack.top() < 0)) + { + stack.push(asteroids[i]); + } + } + + int idx = stack.size(); + std::vector result(idx); + while (stack.size()) + { + result[--idx] = stack.top(); + stack.pop(); + } + + return result; + } +}; \ No newline at end of file -- cgit v1.3.1-23-gd82d