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

最有效的网站推广设计网站的建设背景图片

最有效的网站推广设计,网站的建设背景图片,mc做地图画网站,网站开发是前端还是后台文章目录 摘要描述举个例子: 题解答案题解代码分析(Swift)示例测试及结果输出结果: 时间复杂度分析空间复杂度分析总结 摘要 这篇文章会带你用 Swift 编写一个算法,找出一棵二叉树中最长的「连续递增路径」。不是数组…

在这里插入图片描述
在这里插入图片描述

文章目录

    • 摘要
    • 描述
      • 举个例子:
    • 题解答案
    • 题解代码分析(Swift)
    • 示例测试及结果
      • 输出结果:
    • 时间复杂度分析
    • 空间复杂度分析
    • 总结

摘要

这篇文章会带你用 Swift 编写一个算法,找出一棵二叉树中最长的「连续递增路径」。不是数组那种连续,而是沿着父节点到子节点,只要数值刚好加一,就算连续。我们不仅会实现解法,还会讲清楚怎么递归、怎么处理状态和边界问题。附带 Demo,写完就能跑!

描述

题目大致意思是这样的:

给你一棵二叉树,让你找出最长的一条路径,这条路径需要满足每个节点的值比前一个节点的值正好大 1(比如 1→2→3)。路径必须是从父节点一路走到子节点的,不能反着走,也不能绕道。

举个例子:

    1\3/ \2   4\5

在这棵树里,最长的连续路径是 3→4→5,所以结果是 3

题解答案

这个题我们可以用递归来做,从每个节点出发,去判断它的左右子树是不是能延续这个连续性。如果能,我们就更新当前的计数。如果不能,就从当前节点重新计数。

我们可以用一个全局变量 maxLength 来存储当前找到的最大连续路径长度。

题解代码分析(Swift)

class TreeNode {var val: Intvar left: TreeNode?var right: TreeNode?init(_ val: Int) {self.val = valself.left = nilself.right = nil}
}class Solution {private var maxLength = 0func longestConsecutive(_ root: TreeNode?) -> Int {guard let root = root else { return 0 }dfs(root, nil, 0)return maxLength}private func dfs(_ node: TreeNode?, _ parent: TreeNode?, _ length: Int) {guard let node = node else { return }let currLength = (parent != nil && node.val == parent!.val + 1) ? length + 1 : 1maxLength = max(maxLength, currLength)dfs(node.left, node, currLength)dfs(node.right, node, currLength)}
}

示例测试及结果

我们来写一个 Demo,跑起来试试看。

func buildTree() -> TreeNode {let root = TreeNode(1)root.right = TreeNode(3)root.right?.left = TreeNode(2)root.right?.right = TreeNode(4)root.right?.right?.right = TreeNode(5)return root
}let root = buildTree()
let solution = Solution()
let result = solution.longestConsecutive(root)
print("最长连续序列长度是:\(result)")  // 输出:3

输出结果:

最长连续序列长度是:3

这个结果就是从 3→4→5 这段路径来的,正好是连续递增,长度是 3。

时间复杂度分析

  • 每个节点只会被访问一次,所以整体是 O(n),其中 n 是节点的总数。
  • 在每次递归里我们只是简单做了加法、判断大小这些操作,没有多余的遍历。

空间复杂度分析

  • 除了递归调用栈外,我们只用了一个变量 maxLength
  • 所以空间复杂度是 O(h),h 是树的高度,最坏情况是 O(n)。

总结

这个题目其实是考你怎么在递归中「记住上一层的状态」,再在下一层做对比。只要你理解了“当前值是否比上一个值大 1”这个判断逻辑,整套算法就水到渠成了。

这类题在实际开发中挺有意思,比如:

  • 判断某些数据是否形成稳定增长序列
  • 日志中查找连续变化事件
  • 游戏场景里记录连续操作行为
http://www.dtcms.com/wzjs/833511.html

相关文章:

  • 做视频网站需要什么证书wordpress 标题图片
  • 腾网站建设装修采购网
  • 宁阳网站定制免费十大软件大全下载安装
  • 做托福的网站网站源码是什么格式
  • 什么程序做网站安全服装 营销型网站案例
  • 那种广告式网站怎么做做 英语试题的网站
  • 淄博市建设业协会网站百度小程序开发平台
  • 滨州内做网站的公司网站管理基本内容
  • html5企业网站带后台织梦多语言网站
  • wordpress会建站怎么找工作网站上不去首页seo要怎么办
  • 重庆专业网站推广平台沧州黄骅港贴吧最新消息
  • 两屏合一网站建设游戏打金工作室加盟
  • django 做网站赚钱js调用wordpress
  • 天津网站建设价位wordpress 文章页当前栏目链接
  • 济南网站中企动力如何写网站优化目标
  • 教育网站制作服务wordpress页面 文章页 分类
  • 网站建设方案书应急处置方案英特尔网站开发框架
  • 用ps做网站设计网站界面设计的表现
  • 网站建设前端需要看什么书美工网站做兼职
  • 天津做网站推广的公司中英文网站栏目修改
  • 京东商城网站的搜索引擎营销做的案例分析中国那个公司的网站做的最好
  • 北京网站制作的十大跨境电商公司排名
  • 鲜花便宜的网站建设edu网站开发
  • 网站汉英结合的怎么做订阅号申请
  • 江干网站建设网络销售 市场推广
  • 国内设计好的网站案例关于对网站建设情况的通报
  • 个人网站备案取名商城类网站模板
  • 公司网站建设应符合哪些法规网站建设网站制作公司哪家好
  • 当当网电子商务网站建设wordpress不显示文章的时间
  • 泰安正规网站建设公司电话淄博网络公司做网站的电话