0 0 vote
Article Rating
Subscribe
提醒
guest
5 评论
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
sunznx
// CreateTime: 2020-12-07 11:14:56
class Solution {
public:
    vector<int> asteroidCollision(vector<int>& asteroids) {
        vector<int> ans;


        for (int i = 0; i < asteroids.size(); i++) {
            auto x = asteroids[i];


            ans.push_back(x);


            while (ans.size() >= 2) {
                if (ans.back() > 0) {
                    break;
                }


                auto x = ans.back();
                ans.pop_back();


                auto b = ans.back();
                ans.pop_back();


                if (b < 0 && x < 0) {
                    ans.push_back(b);
                    ans.push_back(x);
                    break;
                }


                if (abs(x) == abs(b)) {
                    break;
                }


                if (abs(x) > abs(b)) {
                    ans.push_back(x);
                }


                if (abs(x) < abs(b)) {
                    ans.push_back(b);
                }
            }
        }


        return ans;
    }
};


暴走的楚狂

今天不在状态,想了很久才理明白

class Solution:
    def asteroidCollision(self, asteroids: List[int]) -> List[int]:
        asteroids_left = []
        for asteroid in asteroids:
            while asteroids_left and asteroids_left[-1] > 0 and asteroid <0:
                if asteroids_left[-1] + asteroid < 0:
                    asteroids_left.pop()
                elif asteroids_left[-1] + asteroid >0:
                    break
                else:
                    asteroids_left.pop()
                    break
            else:
                asteroids_left.append(asteroid)
        return asteroids_left

demo

自己开始想用数组来做 需要用到递归 有个地方绕进去了没有出来,看了官方的思路 用的栈,然后自己写的代码。跟官方的差不多

Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < arr.length; i++) {
            abs:
            {
                while (!stack.isEmpty() && stack.peek() > 0 && arr[i] < 0) {
                    if (Math.abs(stack.peek()) < Math.abs(arr[i])) {
                        stack.pop();
                        continue;
                    } else if (Math.abs(stack.peek()) == Math.abs(arr[i])) {
                        stack.pop();
                    }
                    break abs;
                }
                stack.push(arr[i]);
            }
        }
        if (stack.size() > 0) {
            int[] ints = new int[stack.size()];
            for (int i = stack.size() – 1; i >= 0; i–) {
                ints[i] = stack.pop();
            }
            return ints;
        }
        return new int[0];