给定一个整数数组 asteroids,表示在同一行的行星。
对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。
找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/asteroid-collision
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
输入:asteroids = [5,10,-5] 输出:[5,10] 解释:10 和 -5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。
int* asteroidCollision(int* asteroids, int asteroidsSize, int* returnSize){
int *stack = (int*)malloc(asteroidsSize*sizeof(int));
int top = -1;
for (int i = 0; i < asteroidsSize; i++) {
int push = 1;
while(top > -1 && stack[top] > 0 && asteroids[i] < 0 )//只有stack[top] > 0 asteroids[i] < 0才能发生碰撞;
{
if (-asteroids[i] < stack[top]) {
push = 0;
break;
} else if (-asteroids[i] > stack[top]) {
top--;
continue;
} else {
top--;
push = 0;
break;
}
}
if (push == 1) {
stack[++top] = asteroids[i];
}
}
*returnSize = top + 1;
if(top==-1) return NULL;
else return stack;
}