首页 > 其他分享 >行星碰撞取剩余元素

行星碰撞取剩余元素

时间:2023-03-02 14:13:29浏览次数:30  
标签:剩余 right star asteroids 碰撞 行星 left

给定一个整数数组 asteroids,表示在同一行的行星。

对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相同的速度移动。

找出碰撞后剩下的所有行星。碰撞规则:两个行星相互碰撞,较小的行星会爆炸。如果两颗行星大小相同,则两颗行星都会爆炸。两颗移动方向相同的行星,永远不会发生碰撞。

示例一:

输入:asteroids = [5,10,-5]

输出:[5,10]

解释:10 和 -5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞

 

示例二:

输入:asteroids = [8,-8]

输出 :[]

解释:8 和 -8 碰撞后,两者都发生爆炸。

 

题解:

function asteroidCollision($asteroids) {
$length = count($asteroids);
if ($length === 0) {
return [];
}
if ($length === 1) {
return $asteroids;
}
$stack = [];
array_push($stack, $asteroids[0]);
for ($i = 1; $i < $length; $i++) {
$left_star = array_pop($stack) ?? 0;
$right_star = $asteroids[$i];
     //右星和左星方向不一致才会发生碰撞,是直线型,但不是环形
while($left_star > 0 && $right_star < 0){
if (abs($right_star) > $left_star) { // 右星大,继续取出左星
$left_star = array_pop($stack) ?? 0;
} elseif (abs($right_star) < $left_star) { // 右星小,右星碰撞消失归零
$right_star = 0;
} else { // 左右星一致,双星归零
$right_star = 0;
$left_star = 0;
}
}

if ($left_star !== 0) {
array_push($stack, $left_star);
}
if ($right_star !== 0) {
array_push($stack, $right_star);
}
}
return $stack;
}

特例:

[-2,-1,1,2]  中情况下,左星和右星永远不会发生碰撞,直线型,非环形。

 

标签:剩余,right,star,asteroids,碰撞,行星,left
From: https://www.cnblogs.com/wujf-myblog/p/17171592.html

相关文章

  • JavaScript 数组的剩余方法
    <!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title></title> <scripttype="text/javascript"> vararr=["孙悟空","猪八戒","沙和尚"]; ......
  • 使用剩余参数完成不定长参函数定义 es6 230222
    需求定义一个方法接收任意多个参数返回它们的和技能点在形参前加上三个点可以让这个形参变成 数组这个数组可以接收无限多个数据我们可以在方法体中遍历数组进行想要的操作......
  • 行业大咖云集 多元观点碰撞 OpenHarmony技术峰会与你相约深圳
    2023年2月25日,第一届开放原子开源基金会OpenHarmony技术峰会(以下简称技术峰会)将于深圳隆重召开。本次技术峰会由OpenAtomOpenHarmony(以下简称OpenHarmony)技术指导委员会主......
  • Unity 胶囊碰撞体(CapsuleCollider)
    胶囊碰撞体(CapsuleCollider) 由两个半球与一个圆柱体连接在一起组成。胶囊碰撞体与胶囊原始碰撞体的形状相同。         属性属性:        ......
  • 浅谈ASJ系列剩余电流继电器在施工场地中的应用
    【摘要】施工场地往往十分凌乱,临时性、无计划性是其特点,这就存在着安全隐患。特别是在临时用电方面,往往随意扯线,无安全保障措施。尤其是近些年连续发生了多起漏电造成人员伤......
  • 中国剩余定理模板
    usingll=__int128;template<typenameT>inlinevoidrd(T&data){Tx=0,flag=1;charch=getchar();while(ch<'0'||ch>'9'){......
  • 呈现倒计时时间(剩余时间:09天01时10分12秒)
    vardate1=newDate();//实例化现在的时间vardate2=newDate('2020-12-3020:36-58');vardateDis=(date2-date1)/1000;//相差的总秒数......
  • 二次剩余
    概念\(\forallc\inN^+\),如果\(\existsx^2\equivc\pmodp\),则称\(c\)是模\(p\)的二次剩余。对于\(p\)是奇质数的情况,有简单的方法求出同余方程\(x^2\equi......
  • 二次剩余
    二次剩余定义对于同余方程\(x^2\equivn\pmodp\)有解,则称\(n\)为二次剩余,否则\(n\)为非二次剩余,其中\(p\)为奇素数。欧拉准则用于判断一个数\(n\)是否为......
  • unity2d碰撞和移动的反弹问题
    使用rigidbody2d和collider2d,可以实现控制物体移动和碰撞。但是有一个问题让博主抓狂:代表玩家的小方块撞上障碍物时,会有一瞬间嵌入障碍物,然后被弹回去。简单的控制代码如......