472 Concatenated Words

思路:将词典使用Trie树表示。对于输入的词word,在Trie树上找,当遇到一个isWord=true的节点,查看剩下部分的词是否在词典中。
例如输入 [“cat”,”cats”,”catsdogcats”,”dog”,”dogcatsdog”,”hippopotamuses”,”rat”,”ratcatdogcat”]
查找词cat:尽管cat是词,但是只有一个单词,不能加入结果。
查找词catsdogcats:发现cat是词,继续查找sdog…;发现以s开始的词不存在;返回上层查找cats是词,继续查找dog…。catsdogcats = cats+dog+cats。多一个字母,少一个字母都不是这样的组合。例如catsdogcatss=cats+dog+cats+s,s不在词典中,不能加入结果。
代码

124 Binary Tree Maximum Path Sum

思路:一棵树的路径可以是节点本身,也可以是具有父子关系的节点。例如Node(-10),其路径可以是Node(-10),也可以是Node(-10)->Node(9),还可以是Node(-10)->Node(20) ,还可以是Node(-10)->Node(20)。
图1
对于Node(n)我们知道n,如果我们知道Node(n)左右子节点的路径和,就可以求得以Node(n)为根节点的最大路径和是多少。max(n,leftSum,rightSum,n+leftSum,n+rightSum,n+leftSum+rightSum)。
接下来的问题是子节点的路径和怎么求?
如果是叶子节点,路径和就是Node的value。
如果是父节点,例如图1的Node(20),返回的路径和应该是20+15,因为20+15>20+720+15>20+720+15>20+7;
图2
如果是图2的Node(-20),应该返回-20+15,这个值不是Node(-20)的最大路径和,但是是路径包含Node(-20)这个点最大的路径和。
图3
如果是图3的节点Node(4)的左子树路径和是11+7=18,因为11+7>11+211+7>11+211+7>11+2。
注意:节点的路径一定是指节点经过其中左子树或者右子树的路径。

再说一下求在节点Node(n)最大路径和的计算式:max(n,leftSum,rightSum,n+leftSum,n+rightSum,n+leftSum+rightSum)。如果我们设一个全局变量maxValue记录每处理一个节点时候的路径和最大值。那么maxValue>=leftSummaxValue>=leftSummaxValue>=leftSum,并且maxValue>=rightSummaxValue>=rightSummaxValue>=rightSum,这个是根据上面的描述得到的。所以leftSum,rightSum不需要参与比较。n+leftSum,n+rightSum,n+leftSum+rightSum是分别考虑了leftSum,rightSum为负数的情况。那么n+leftSum=n+leftSum+0n+leftSum=n+leftSum+0n+leftSum=n+leftSum+0也就是认为rightSum=0。那么就可以取n+Math.max(leftSum,0)n+Math.max(leftSum,0)n+Math.max(leftSum,0)简化表达式。对rightSum也同理。所以最后计算式变为max(n,n+Math.max(leftSum,0)+Max.max(rightSum,0))。
代码

99. Recover Binary Search Tree

思路:完全不知道怎么做。
学习:从页面知道了解法。中序遍历搜索二叉树,遍历的结果应该是一个升序序列。

上图这棵树的中序遍历结果是:1 2 3 4。
如果发现当前元素<前面的元素,则前面的元素需要换位置。
换到哪个位置呢?可能是当前位置,继续遍历,也可能是其他位置,但肯定是一个前元素<前面的元素的当前位置。

在中序遍历上图的时候,当访问到Node(2),前一个节点是Node(3),Node(2)<Node3Node(2)<Node3Node(2),则Node(3)需要换位置,暂时决定把Node(2)和Node(3) 换位置,记下firstElement=Node(3),secondElement=Node(2)。继续遍历,如果发现当前节点<前面的节点当前节点<前面的节点当前节点,则把secondElement=当前节点。
最后firstElement和secondElement交换位置(交换节点的值)。
代码

839 Similar String Groups

思路:首先写一个函数similar,判断两个字符串是否相似。其次,输入有n个字符串,每个字符串两两比较,相似的字符串放入一组。使用Union-Find实现。(代码)
学习:用DFS的思路。处理元素A[i]:A[i]与其他元素比较。发现相似元素A[j],就继续使用A[j]去比较,一直比较完,同一组的元素比较完成。接着处理其他组的元素。学习网页链接。这个解法真的很棒。以前对于使用dfs,总是在主函数中调用一次就结束了。这个思路告诉我,一次dfs找到同一组元素。其次,文章中将比较过的A[i]=null,也很棒。以前标记是否访问过都会开辟boolean数组来实现。(代码)

Depth-first Search深度优先搜索专题6相关推荐

  1. Depth-first Search深度优先搜索专题1

    104. Maximum Depth of Binary Tree 思路:顺着树的一个分支一直数层数直到叶子节点.DFS的思路.这个题目可以练习的是递归转迭代. 代码 695. Max Area of ...

  2. Depth-first Search深度优先搜索专题4

    576. Out of Boundary Paths 思路:这道题目难倒了我.最直接的思路是暴力搜索.要注意的问题1是需要仔细观察Example2,轨迹不同意思是可以从A点到B点,再从B点到A点也可以 ...

  3. Depth-first Search深度优先搜索专题2

    199. Binary Tree Right Side View 思路:想要得到树的每一层最右侧元素值,用BFS最方便.先访问左节点再访问右节点,最后访问的一个值就是留下的值. 想要DFS的思路也可以 ...

  4. Depth-first Search深度优先搜索专题3

    473. Matchsticks to Square 思路:有n根长度不一的火柴,这些火柴可以拼接在一起,但不能被折断.这些火柴能够围城一个正方形吗?每个火柴可以并且必须使用一次.分析得到每个边的长度 ...

  5. Depth-first Search深度优先搜索专题7

    834 Sum of Distances in Tree 思路:一颗无向的树有N个节点,分别标记为0,1,2,-N-1,有若干条边.结果返回每个节点到其他节点的路径和. 以上面这棵树为例.从节点0到其 ...

  6. Depth-first Search深度优先搜索专题5

    329. Longest Increasing Path in a Matrix 思路:计算某个位置i,j,最长路径的长度.计算长度的条件是:如果i,j的相邻位置newi,newj不能出matrix的 ...

  7. JavaScript实现depth First Search深度优先搜索算法(附完整源码)

    JavaScript实现depth First Search深度优先搜索算法(附完整源码) depthFirstSearch.js完整源代码 depthFirstSearch.js完整源代码 func ...

  8. Breadth-first Search(广度优先搜索)专题1

    广度优先搜索的定义 广度优先搜索BFS类似于树的层次遍历算法.基本思想是:首先访问顶点v,然后由v出发,依次访问v的各个未被访问过的顶点w1,w2,w3-wn.然后再访问wi(wi是w1,w2,w3- ...

  9. Breadth-first Search(广度优先搜索)专题2

    743. Network Delay Time 输入:int[][] times times[i]= new int[]{v,u,w} 表示从节点v到节点u需要时间w.注意这里是有向图. int N ...

最新文章

  1. 提取IPv6地址的编码信息
  2. 14-python基础3-数据类型
  3. html自动执行bat,html文件执行cmd指令
  4. 【Mybatis】分割字符串
  5. java 注解数组初始化_Java 之 注解的定义
  6. 数组指定位置添加元素_数据结构--顺序表的9种基本运算,初始化,销毁,判断是否为空表,长度,求指定位置的元素值......
  7. HTML怎么在li中加select标签,Vue.js做select下拉列表的实例(ul-li标签仿select标签)_莺语_前端开发者...
  8. ajax跨域,json,jsonp
  9. linux下ftp命令打印日志,ftp服务器日志解析
  10. 成都-峨眉山(乐山)旅游攻略
  11. android win8 磁贴效果第三方库,Win8巧用动态磁贴让浏览更轻松
  12. B. Kay and Snowflake(重心的性质)
  13. 【macOS免费软件推荐】第1期:MuseScore
  14. 动态壁纸安卓_酷玩软件第7期:还在用无声的动态壁纸?短视频壁纸软件(Win+安卓版本)...
  15. 2022年华中杯思路
  16. 元宇宙六大技术全景图
  17. LTE-TDD随机接入过程(4)-RIV的解析和Preamble资源的选择
  18. php掷骰子游戏,js实现简单掷骰子小游戏
  19. 997. 找到小镇的法官_小镇...
  20. Unity实现 场景切换 音乐不断

热门文章

  1. 2015-05-31
  2. 再看数据库——(2)视图
  3. CSS命名规范(建议版)(转)
  4. Re: 社团改革还让不让人活了?
  5. jsx怎么往js里传参数_Angular、React 当前,Vue.js 优劣几何?
  6. Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
  7. Android 视频播放器,VideoView播放视频
  8. 微信开发基础 获取用户OpenID 列表
  9. VS2010测试工具对应LoadTest2010创建sql
  10. 禁用应用中Android系统的导航栏(特别是平板)