--- tags: leetcode --- # [735. Asteroid Collision](https://leetcode.com/problems/asteroid-collision/) --- # My Solution ## The Key Idea for Solving This Coding Question Monotonic stack ## C++ Code ```cpp= class Solution { public: vector<int> asteroidCollision(vector<int> &asteroids) { vector<int> answer; for (auto &asteroid : asteroids) { if (answer.empty()) { answer.push_back(asteroid); continue; } if (asteroid > 0) { answer.push_back(asteroid); continue; } // asteroid < 0 is true if (answer.back() > 0 ) { // answer.back() and asteroid will collide. if (answer.back() > -asteroid) { // asteroid explode. } else if (answer.back() == -asteroid) { // Both exolode. answer.pop_back(); } else { // answer.back() < -asteroid is true // answer.back() explode. while (!answer.empty() && answer.back() > 0 && answer.back() < -asteroid) { answer.pop_back(); } if (answer.empty()) { answer.push_back(asteroid); continue; } if (answer.back() < 0) { answer.push_back(asteroid); continue; } if (answer.back() > -asteroid) { continue; } if (answer.back() == -asteroid) { answer.pop_back(); } } } else { // answer.back() < 0 answer.push_back(asteroid); } } return answer; } }; ``` ## Time Complexity $O(n)$ $n$ is the length of `asteroids`. ## Space Complexity $O(n)$ $n$ is the length of `asteroids`. # Miscellaneous <!-- # Test Cases ``` [5,10,-5] ``` ``` [8,-8] ``` ``` [10,2,-5] ``` ``` [-2,-1,1,2] ``` ``` [10,2,-20] ``` * Wrong Answer: ``` [-2,1,1,-1] ``` * Runtime Error: ``` [1,-1,-2,-2] ``` * Wrong Answer: ``` [-2,-2,1,-2] ``` -->