[LC735]行星碰撞
2022/7/14 6:20:17
本文主要是介绍[LC735]行星碰撞,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目描述
给定一个整数数组 asteroids,表示在同一行的行星。对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。[题目地址]
思路与代码
对题目进行简单分析后发现,行星碰撞是具有延续性质的,换句话说,当相邻的两个行星发生碰撞后,其中的一个行星会消失,继续存在的行星若和新的相邻行星也符合碰撞条件,则能继续地进行碰撞。另外,还可以发现,不论以从左到右或是从右到左,或是其他顺序。只要星星之间的相对位置不变,其最终结果不变。这样两个特点,很自然想到用使用栈作为基本的数据结构,并模拟其碰撞的规则。
点击查看代码
public int[] asteroidCollision(int[] asteroids) { Deque<Integer> stack = new ArrayDeque(); //check every aster from left to right for(int aster : asteroids){ boolean addNewAster = true; //keep check until this aster is dead or there is no collision to happen while(addNewAster && !stack.isEmpty() && stack.peekLast() > 0 && aster < 0){ int lastAster = stack.peekLast(), copyAster = -aster; if(lastAster <= copyAster) stack.pollLast(); if(lastAster >= copyAster) addNewAster = false; } if(addNewAster) stack.addLast(aster); } int[] rtn = new int[stack.size()]; for(int i = 0; i < rtn.length ; i++){ rtn[i] = stack.pollFirst(); } return rtn; }
这篇关于[LC735]行星碰撞的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享