码迷,mamicode.com
首页 > 其他好文 > 详细

小行星碰撞 Asteroid Collision

时间:2018-08-07 13:01:42      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:题目   highlight   src   ret   class   arp   lis   lin   数组   

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

标签:题目   highlight   src   ret   class   arp   lis   lin   数组   

原文地址:https://www.cnblogs.com/TIMHY/p/9435893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!