Untitled

 avatar
unknown
c_cpp
a year ago
1.4 kB
6
Indexable
class Solution {
public:
    vector<int> asteroidCollision(vector<int>& asteroids) {
        stack<int> st;

        for(int i=0 ; i<asteroids.size() ; i++) {
            if(st.size() > 0) {
                int newElement = asteroids[i];
                while(!st.empty()) {
                    int atTop = st.top();
                    st.pop();
                    if((atTop >= 0 and newElement >= 0) or (atTop < 0 and newElement < 0) or (atTop < 0 and newElement >= 0)) {
                        st.push(atTop);
                        st.push(newElement);
                        break;
                    } else {
                        if(abs(newElement) > abs(atTop)) {
                            newElement = newElement;
                        }
                        else if (abs(newElement) < abs(atTop)) {
                            newElement = atTop;
                        }
                        else {
                            newElement = 1234567;
                            break;
                        }
                    }
                }
                if(st.empty() and newElement != 1234567) st.push(newElement);
            } else {
                st.push(asteroids[i]);
            }
        }

        vector<int> ans;
        while (!st.empty()) {
            ans.push_back(st.top());
            st.pop();
        }
        reverse(ans.begin(), ans.end());
        return ans;
    }
};
Editor is loading...
Leave a Comment