for (int i = index; i < asteroids.length; i++) { if (asteroids[i] > 0) { stack.push(asteroids[i]); } else { int t = asteroids[i]; boolean flag = true; while (t < 0 && !stack.isEmpty()) { Integer peek = stack.peek(); if (peek < 0) { break; } elseif (peek > 0) { t = pick(peek, t); if (t == 0) { stack.pop(); flag = false; break; } elseif (t > 0) { flag = false; break; } elseif (t < 0) { stack.pop(); } } } if (flag) { stack.push(asteroids[i]); } } }
最后统计一下
1 2 3 4 5 6 7 8 9 10
int n = index + stack.size(); int[] res = newint[n]; for (int i = 0; i < index; i++) { res[i] = asteroids[i]; } while (n > index) { res[n - 1] = stack.pop(); n = n - 1; } return res;
classSolution{ publicint[] asteroidCollision(int[] asteroids) { int index = 0; while (index < asteroids.length && asteroids[index] < 0) { index++; }
Stack<Integer> stack = new Stack<>();
for (int i = index; i < asteroids.length; i++) { if (asteroids[i] > 0) { stack.push(asteroids[i]); } else { int t = asteroids[i]; boolean flag = true; while (t < 0 && !stack.isEmpty()) { Integer peek = stack.peek(); if (peek < 0) { break; } elseif (peek > 0) { t = pick(peek, t); if (t == 0) { stack.pop(); flag = false; break; } elseif (t > 0) { flag = false; break; } elseif (t < 0) { stack.pop(); } } } if (flag) { stack.push(asteroids[i]); } } }
int n = index + stack.size(); int[] res = newint[n]; for (int i = 0; i < index; i++) { res[i] = asteroids[i]; } while (n > index) { res[n - 1] = stack.pop(); n = n - 1; } return res; }
publicintpick(int x, int y){ if (x == -y) { return0; } elseif (x > 0 && y < 0) { return x > -y ? x : y; } elseif (x < 0 && y > 0) { return y > -x ? y : x; } else { return0; } } }