小行星碰撞 Asteroid Collision
Posted timhy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小行星碰撞 Asteroid Collision相关的知识,希望对你有一定的参考价值。
2018-08-07 11:12:01
问题描述:
问题求解:
使用一个链表模拟栈,最后的状态一定是左侧全部是负值,表示的是向左飞行,右侧的全部是正值,表示的是向右飞行。
遍历整个数组,对于每个读到的数字,如果是正值则直接加入链表中,如果是负值,则需要判断链表中末尾的数字如果也是负值,则表示目前链表中全部向左飞行,则加入,如果说此时链表中最后的数字为正值,则表示会相撞,需要进行比较判断。
这个题目的解法也给出了如果将Colleaction转化为int[],可以使用colleaction.stream().mapToInt(i -> i).toArray()来进行转换。
public int[] asteroidCollision(int[] asteroids) { LinkedList<Integer> res = new LinkedList<>(); for (int i = 0; i < asteroids.length; i++) { if (asteroids[i] > 0 || res.size() == 0 || res.peek() < 0) { res.add(asteroids[i]); } else if (res.getLast() <= -asteroids[i]) { if (res.pollLast() < -asteroids[i]) i--; } } return res.stream().mapToInt(i -> i).toArray(); }
以上是关于小行星碰撞 Asteroid Collision的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode 735. Asteroid Collision
LeetCode 0735.行星碰撞:两种方法(方法二是方法一的优化)