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

厦门过路费网站福建省建设执业资格注册中心网站

厦门过路费网站,福建省建设执业资格注册中心网站,企业怎样建立自己的网站,个人网站制作的主要内容其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 什么情况会用到栈 2.2 方法一#xff1a;模拟 栈 三、代码 3.1 方法一#xff1a;模拟 栈 四… 其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 什么情况会用到栈 2.2 方法一模拟 栈 三、代码 3.1 方法一模拟 栈 四、复杂度分析 4.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 asteroids.length  104-1000 asteroids[i] 1000asteroids[i] ! 0 二、题解 2.1 什么情况会用到栈 栈是一种数据结构其特点是后进先出Last In First OutLIFO。在算法中栈在很多情况下是非常有用的下面是一些常见的情况 括号匹配当你有一个包含括号的字符串并且你想要检查这个字符串中的括号是否匹配你可以使用栈。从左到右扫描字符串如果遇到左括号如“(”“{”或“[”则将其压入栈。如果遇到右括号则从栈顶弹出一个元素并检查它们是否匹配。如果它们不匹配那么这个字符串就不是有效的。深度优先搜索DFS在图的遍历中栈经常被用于实现深度优先搜索。首先将起始节点压入栈。然后当栈不为空时弹出栈顶元素并访问它。对于每个刚刚访问过的节点将其未被访问过的邻居节点压入栈。函数调用在计算机程序的执行中函数调用通常使用栈来管理。当一个函数被调用时它的参数和局部变量被压入栈。当函数执行结束时这些数据从栈中弹出。文本编辑器中的撤销/重做功能许多文本编辑器使用撤销/重做功能来允许用户撤销他们最近所做的更改。这些功能通常使用一个操作栈每个操作例如插入或删除文本都被压入栈。用户可以多次撤销每次撤销都从栈中弹出并反转一个操作。解析语法在编译原理中栈被广泛用于解析语法。例如在解析一个算术表达式时你可以使用栈来保持追踪括号和操作符的优先级。 这只是栈在算法中的一些应用实际上还有很多其他的应用场景。 2.2 方法一模拟 栈 思路与算法 由于碰撞抵消总是从相邻行星之间发生我们可以使用「栈」来模拟该过程。 从前往后处理所有的 asteroids[i] 使用栈存储当前未被抵消的行星当栈顶元素方向往右当前 asteroids[i] 方向往左时会发生抵消操作抵消过程根据规则进行即可。 用到变量 ok 的 true 和 false 来表示待插入栈的元素是否还大于栈顶元素。 最后把栈内元素再放入 int[] 中。 三、代码 3.1 方法一模拟 栈 Java版本 class Solution {public static int[] asteroidCollision(int[] asteroids) {ArrayDequeInteger deque new ArrayDeque();for (int i : asteroids) {boolean ok true;while (ok !deque.isEmpty() deque.peekLast() 0 i 0) {int a deque.peekLast(), b -i;if (a b) deque.pollLast();if (a b) ok false;}if (ok) deque.addLast(i);}int n deque.size();int[] res new int[n];while(!deque.isEmpty()) res[--n]deque.pollLast();return res;} } C版本 class Solution { public:static vectorint asteroidCollision(vectorint asteroids) {dequeint deque;for (int i : asteroids) {bool ok true;while (ok !deque.empty() deque.back() 0 i 0) {int a deque.back(), b -i;if (a b) deque.pop_back();if (a b) ok false;}if (ok) deque.push_back(i);}vectorint res(deque.begin(), deque.end());return res;} };Python版本 from collections import dequeclass Solution:def asteroidCollision(self, asteroids: List[int]) - List[int]:deque deque()for i in asteroids:ok Truewhile ok and deque and deque[-1] 0 and i 0:a, b deque[-1], -iif a b: deque.pop()if a b: ok Falseif ok: deque.append(i)return list(deque)Go版本 package mainimport fmtfunc asteroidCollision(asteroids []int) []int {var stack []intfor _, i : range asteroids {ok : truefor ok len(stack) 0 stack[len(stack)-1] 0 i 0 {a, b : stack[len(stack)-1], -iif a b {stack stack[:len(stack)-1]}if a b {ok false}}if ok {stack append(stack, i)}}return stack }func main() {asteroids : []int{5, 10, -5}fmt.Println(asteroidCollision(asteroids)) }四、复杂度分析 4.1 方法一模拟 栈 时间复杂度O(n)。空间复杂度O(n)。
http://www.zqtcl.cn/news/856193/

相关文章:

  • c 网站开发案例详解手机网站返回顶部代码
  • 济南微网站建设图书馆评估定级关于网站建设标准
  • flash型网站宝塔面板做网站绑定域名
  • 建设网站的策划书门户网站 流量
  • 佛山高端网站建设便宜自适应网站建设
  • 网络营销创意案例桂林seo公司推荐23火星
  • 网站开发知识产权归属问题wordpress会计模板下载
  • 昆明网站的优化自媒体是干什么的
  • 大成建设株式会社网站删掉wordpress主题
  • 个人网站备案类型网络维护培训班
  • 做网站的可以注册个工作室吗一个网站两个域名吗
  • 网站建设要准备什么资料网站建设 锐颖科技
  • 如何建设网站山东济南兴田德润官网电子商城官网
  • 网站如何做支付宝接口免费ppt自动生成器
  • 泰安市建设职工培训中心网站官网seo经理招聘
  • 湛江做网站seo网站建设 0551
  • 建站公司 深圳苏州建站公司
  • 网站怎么做引流呢济南网站微信
  • 一个域名可以做几个网站吗wordpress左右翻转页面
  • 天津人工智能建站系统软件wordpress主题没有小工具
  • 网站的备案流程图视频制作素材
  • 劳务公司网站建设方案建设促销网站前的市场分析
  • 网络营销优化培训网站seo置顶 乐云践新专家
  • 小说网站搭建教程wordpress后台图片
  • 付网站开发费计入什么科目网站开发的历史
  • 站长素材ppt模板免费下载网站开发视频教程迅雷下载
  • 建设一个网站怎么赚钱南京江北新区房价走势最新消息
  • 一个网站怎么做软件下载互联网投放渠道有哪些
  • 手机网站建设进度环境设计排版素材网站
  • 网站开发众筹地推网推平台