当前位置: 首页 > news >正文

电商网站的建设动态搜索引擎推广的优势

电商网站的建设动态,搜索引擎推广的优势,企业网站建设总结,广西营销型网站建设1.题目描述 735. 行星碰撞 给定一个整数数组 asteroids,表示在同一行的行星。 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表示向左移动)。每一颗行星以相…

1.题目描述

735. 行星碰撞

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

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

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

示例 1:

输入:asteroids = [5,10,-5]
输出:[5,10]
解释:10 和 -5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。

示例 2:

输入:asteroids = [8,-8]
输出:[]
解释:8 和 -8 碰撞后,两者都发生爆炸。

示例 3:

输入:asteroids = [10,2,-5]
输出:[10]
解释:2 和 -5 发生碰撞后剩下 -5 。10 和 -5 发生碰撞后剩下 10 。

2.解题思路与代码

2.1 解题思路

题目说正数行星向右运动,负数行星向左运动,那么当数组中遇到负数时,就需要与该数前面的正数进行比较,如果前面是正数,那么发生碰撞留下绝对值较大的;绝对值相等则抵消,两数消失。根据这一思路,使用栈进行解答。遍历数组如果当前数大于 0 ,并且栈顶元素小于 0,那么就需要弹出栈顶元素与当前数进行比较,就会有以下三种情况:

  • 如果当前元素绝对值大于弹出元素绝对值,选择当前元素,继续弹出栈顶元素进行比较;
  • 如果当前元素绝对值小于弹出元素绝对值,选择弹出元素并退出循环,弹出元素重新入栈
  • 如果当前元素绝对值等于弹出元素绝对值,两数同时消失

下面用题目示例 [5, 10, -5] 进行图解:

  1. 首先 index=0 指向 5,此时栈为空直接入栈

  2. index 右移,此时 index 指向元素和栈顶元素都大于 0,方向相同不会碰撞直接入栈
    在这里插入图片描述

  3. index 右移,此时 index 指向 -5,栈顶元素为 10,会发生碰撞因此弹出栈顶 10 与 -5 进行比较,10 的绝对值大于 -5 的绝对值,因此 -5 消失留下 10。循环这一步,当前元素为 10 栈顶为 5 不会发生碰撞,10 重新入栈

  4. 数组遍历完成,最后栈中留下 5 和 10 位最终答案

由于答案需要返回一个数组,为了便于最终将结果转数组因此代码中使用数组模拟栈,同样也可以使用双端队列来做。

2.2 代码

class Solution {public int[] asteroidCollision(int[] asteroids) {// 为便于返回结果数组,使用数组模拟栈int[] stack = new int[asteroids.length];int idx = -1;// 开始时将数组第一个元素入栈stack[++idx] = asteroids[0];int index = 1;while (index < asteroids.length) {Integer chooseNum = asteroids[index];// 当选择数字小于 0,栈顶数字大于 0 时会发生碰撞,需要进行处理while (idx > -1 && chooseNum < 0 && stack[idx] > 0) {// 弹出栈顶数字Integer pop = stack[idx--];if (Math.abs(chooseNum) > pop) {// 如果选择的数绝对值大于弹出栈的数绝对值,则保留选择的数,继续循环continue;} else if (Math.abs(chooseNum) < pop) {// 如果选择的数绝对值小于弹出栈的数绝对值,选择数字改为弹出的数字// 下次循环条件判断不通过,退出循环后直接重新入栈chooseNum = pop;} else {// 如果选择的数绝对值等于弹出栈的数绝对值,两数同时消失,chooseNum 置 nullchooseNum = null;break;}}if (chooseNum != null) {stack[++idx] = chooseNum;}index++;}int[] ans = new int[idx + 1];System.arraycopy(stack, 0, ans, 0, idx + 1);return ans;}
}

2.3 测试结果

通过测试

测试结果

3.总结

  • 使用栈进行解答
  • 当元素大于 0,栈顶元素小于 0 时会发生碰撞,此时需要处理
  • 处理时比较当前元素和弹出栈元素的绝对值大小,绝对值大的保留,并循环比较保留数和栈顶元素的情况
http://www.hkea.cn/news/583881/

相关文章:

  • 网站备案 法人身份证cba最新消息
  • 做公司网站需要什么手续厦门seo网站优化
  • 合肥本地网站网站关键词公司
  • 武汉电商网站建设seopc流量排行榜企业
  • 如何给给公司建立网站seo商学院
  • 让建站公司做网站需要什么最新腾讯新闻
  • 网站开发的意义搜索关键词排名优化
  • 如何建一个论坛网站怎么做营销推广
  • 元凤建盏简介青岛seo
  • 营销型网站套餐cps游戏推广平台
  • 哪些网站做ip向小说网络营销公司经营范围
  • 蜜芽免费网站域名关键词网站排名查询
  • 网站备案要到哪里下载关键词在线挖掘网站
  • 跨境电商开发seo的优化策略有哪些
  • 做网站的费用 优帮云百度广告代运营
  • wordpress儿童卡通主题兰州网站seo服务
  • 8网站建设做网站sem优化师是什么意思
  • 设计师个人网站怎么做百度优化培训
  • 广东海外建设监理有限公司官方网站2345网址导航是病毒吗
  • 深圳网站制作培训宁波网络营销公司
  • 网站建设方案书 模板长清区seo网络优化软件
  • 简述网站的推广策略产品设计
  • 商贸有限公司网站建设此网站服务器不在国内维护
  • 常州个人做网站制作小程序的软件
  • 郑州做网站公司dz论坛如何seo
  • 十堰商城网站建设网络营销seo优化
  • 小欢喜林磊儿什么网站做家教福州seo推广外包
  • 许昌网站开发博客营销
  • 做网站用jquery爱站网关键词挖掘
  • wordpress手动裁剪seo营销推广服务公司