LeetCode 735 Asteroid Collision

LeetCode 735

Asteroid Collision

  • Problem Description:
    题目大体意思就是给出一串整数(包括正数和负数,不包括零)来描述星体运动过程中产生的碰撞情况。其中,整数的绝对值代表星体的大小,正负号表示星体的运动方向,负号表示向左运动,正号表示向右运动。当两个星体碰撞时,大星体把小星体kill掉,剩下自己独孤求败。
    具体的题目信息:
    https://leetcode.com/problems/asteroid-collision/description/

  • Solution:
    1、用栈实现:观察题目给的example 4可以知道不是所有正负数相见都会打架的。当asteroids[i]为正数时,不管栈顶元素正负,都可以直接push(若栈顶元素为负,栈中星体向左运动,输入的asteroids[i]为正数,栈外星体向右运动,不会碰撞)
    2、我比较笨,用栈实现后面返回结果的时候忘记转成vector类型,找了一小会

class Solution {
public:
    vector<int> asteroidCollision(vector<int>& asteroids) {
        stack<int> result;
        if (asteroids.size() == 0)
            return asteroids;
        for (int i = 0; i < asteroids.size(); i++) {
            int flag = 0;
            if (result.empty()) {
                result.push(asteroids[i]);
                continue;
            }
            if (asteroids[i] > 0) {
                result.push(asteroids[i]);
            } else {
                if (result.top() < 0) {
                    result.push(asteroids[i]);
                } else {
                    while (!result.empty()&&result.top()>0) {
                        if (abs(asteroids[i])1;
                            break;
                        } else if (abs(asteroids[i]) == result.top()) {
                            result.pop();
                            flag = 1;
                            break;
                        } else {
                            result.pop();
                        }
                    }
                    if (flag == 0)
                        result.push(asteroids[i]);
                }
            }
        }
        vector<int> sum;
        while (!result.empty()) {
            sum.push_back(result.top());
            result.pop();
        }
        for (int i = 0; i < sum.size()/2; i++) {
            int temp  = sum[sum.size()-i-1];
            sum[sum.size()-i-1] = sum[i];
            sum[i] = temp;
        }
        return sum;
    }
};

你可能感兴趣的:(leetcode,stack)