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

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图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+7
这里写图片描述图2
如果是图2的Node(-20),应该返回-20+15,这个值不是Node(-20)的最大路径和,但是是路径包含Node(-20)这个点最大的路径和。
这里写图片描述图3
如果是图3的节点Node(4)的左子树路径和是11+7=18,因为11+7>11+211+7>11+2
注意:节点的路径一定是指节点经过其中左子树或者右子树的路径。

再说一下求在节点Node(n)最大路径和的计算式:max(n,leftSum,rightSum,n+leftSum,n+rightSum,n+leftSum+rightSum)。如果我们设一个全局变量maxValue记录每处理一个节点时候的路径和最大值。那么maxValue>=leftSummaxValue>=leftSum,并且maxValue>=rightSummaxValue>=rightSum,这个是根据上面的描述得到的。所以leftSum,rightSum不需要参与比较。n+leftSum,n+rightSum,n+leftSum+rightSum是分别考虑了leftSum,rightSum为负数的情况。那么n+leftSum=n+leftSum+0n+leftSum=n+leftSum+0也就是认为rightSum=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)<Node3,则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数组来实现。(代码)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测近5年发展历程概述(转)

目标检测近5年发展历程概述&#xff0c;从R-CNN到RFBNet&#xff08;2013--2018&#xff09;&#xff08;转&#xff09; 2018年09月24日 12:32:02 C小C 【时间】2018.09.24 【题目】目标检测近5年发展历程概述&#xff0c;从R-CNN到RFBNet&#xff08;2013--2018&#xff09; …

[Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

【问题描述】[中等] 【解答思路】 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List;public class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {int …

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

834 Sum of Distances in Tree 思路&#xff1a;一颗无向的树有N个节点&#xff0c;分别标记为0,1,2,…N-1&#xff0c;有若干条边。结果返回每个节点到其他节点的路径和。 以上面这棵树为例。从节点0到其他点的路径查找过程是&#xff1a;节点0有两条边分别到达子节点1和子节…

[Leetcode][第216题][JAVA][数组之和3][回溯]

【问题描述】[中等] 【解答思路】 回溯 剪树枝 当和超过n 或 个数超过k 1. 正向求和 优化前 class Solution {public List<List<Integer>> ans new LinkedList();public List<List<Integer>> combinationSum3(int k, int n) {dfs(0,k,0,n,1,new L…

第十三期:你不想错过的那些JSON工具

网上有许多出色的免费工具用于JSON格式化、验证、编辑以及转换成其他格式&#xff0c;可供开发人员选择。 作者&#xff1a;布加迪 JSON(JavaScript对象标注)是一种流行的轻量级数据交换格式&#xff0c;在网络上已很常见。 众所周知&#xff0c;JSON让开发人员易于使用&#…

java jvm学习

在并发编程中&#xff0c;多个线程之间采取什么机制进行通信&#xff08;信息交换&#xff09;&#xff0c;什么机制进行数据的同步&#xff1f; 在Java语言中&#xff0c;采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。 线程之间通过共享程序公共的状态&#…

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

广度优先搜索的定义 广度优先搜索BFS类似于树的层次遍历算法。基本思想是&#xff1a;首先访问顶点v&#xff0c;然后由v出发&#xff0c;依次访问v的各个未被访问过的顶点w1,w2,w3…wn。然后再访问wi(wi是w1,w2,w3…wn中的一个)未被访问过的邻接点。以此类推&#xff0c;直到所…

[Leetcode][第40题][JAVA][数组总和2][回溯][剪枝]

【问题描述】[中等] 【解答思路】 1. 减法 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Deque; import java.util.List;public class Solution {public List<List<Integer>> combinationSum2(int[] can…

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

743. Network Delay Time 输入&#xff1a;int[][] times times[i] new int[]{v,u,w} 表示从节点v到节点u需要时间w。注意这里是有向图。    int N 节点总数。    int k 起始节点 输出&#xff1a;从节点k到其他各个节点的最短路径和。如果有一个节点不能达到则返回-1。 …

负载均衡—几种常见算法

什么是负载均衡&#xff1f; 当一台服务器的性能达到极限时&#xff0c;我们可以使用服务器集群来提高网站的整体性能。那么&#xff0c;在服务器集群中&#xff0c;需要有一台服务器充当调度者的角色&#xff0c;用户的所有请求都会首先由它接收&#xff0c;调度者再根据每台服…

[Leetcode][第79题][JAVA][单词搜索][DFS][回溯]

【问题描述】[中等] 【解答思路】 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {boolean flag false;int row board.length;int col board[0].length;boolean[][] used new boolean[row][col];for (int i 0; i <row ; i) {for …

【Breadth-first Search 】513. Find Bottom Left Tree Value

输入&#xff1a;一颗二叉树 输出&#xff1a;这颗树的最下面一层最左边的节点值。 分析&#xff1a; 用BFS的思路解决最直观。读每一层&#xff0c;在每一层记录第一个元素的值。在队列中第一层&#xff1a;1&#xff1b;第二层&#xff1a;2&#xff0c;3&#xff1b;第三层…

Java:这是一份全面 详细的 Synchronized关键字 学习指南

前言 在Java中&#xff0c;有一个常被忽略 但 非常重要的关键字Synchronized今天&#xff0c;我将详细讲解 Java关键字Synchronized的所有知识&#xff0c;希望你们会喜欢目录 1. 定义 Java中的1个关键字 2. 作用 保证同一时刻最多只有1个线程执行 被Synchronized修饰的方法…

[Leetcode][第404题][JAVA][左叶子之和][DFS][BFS]

【问题描述】[简单] 【解答思路】 1. DFS 递进思想 一步一步递进 /先序遍历求所有节点值之和 public int sumOfTrees(TreeNode root) {if (root null) {return 0;}int leave root.val;int left sumOfTrees(root.left);int right sumOfTrees(root.right);return left ri…

第十四期: 拥有7000多万店铺和10多亿件商品的微店如何打造AI系统?

AI技术对于电商至关重要&#xff0c;但AI的实践门槛很高&#xff0c;对于创业公司尤其如此。那么电商创业公司如何打造AI系统?如何利用AI解决实际问题? 作者&#xff1a;夏剑 AI技术对于电商至关重要&#xff0c;但AI的实践门槛很高&#xff0c;对于创业公司尤其如此。那么电…

【数据结构与算法】【算法思想】位图

位图BitMap 算法 public class BitMap { // Java中char类型占16bit&#xff0c;也即是2个字节private char[] bytes;private int nbits;//nbits 总容量public BitMap(int nbits) {this.nbits nbits;this.bytes new char[nbits/161];}//长度16 k/16 定位某一段 k%16定位段中某…

【Breadth-first Search 】专题3

529 Minesweeper 输入&#xff1a;一个二维矩阵&#xff0c;一些修改规则。  如果点到一个隐藏的地雷M&#xff0c;把它改为X&#xff0c;游戏结束  如果点到一个E&#xff0c;且其周围8邻接的范围没有地雷&#xff0c;那么应该把8邻接的范围的格子全部翻开为E  如果翻开的…

第十五期:一个用户至少“值”100美元,美国最“贵”数据法案CCPA明年初实行!

还在急于应对欧洲GDPR&#xff08;General Data Protection Regulation&#xff0c;通用数据保护条例&#xff09;&#xff1f;那你就OUT了&#xff01; 作者&#xff1a;文摘菌 大数据文摘出品 作者&#xff1a;刘俊寰 还在急于应对欧洲GDPR(General Data Protection Regul…

【数据结构与算法】【算法思想】【推荐系统】向量空间

背景知识 欧几里得的距离公式 推荐系统方法 应用 如何实现一个简单的音乐推荐系统&#xff1f; 1. 基于相似用户做推荐 找到跟你口味偏好相似的用户&#xff0c;把他们爱听的歌曲推荐给你&#xff1b; 2. 基于相似歌曲做推荐 找出跟你喜爱的歌曲特征相似的歌曲&#x…

第十六期:AWS 瘫痪:DNS 被 DDoS 攻击了 15 个小时

AWS警告客户&#xff0c;分布式攻击严重阻碍网络连接&#xff0c;殃及众多网站和应用软件&#xff0c;云巨头AWS遭到攻击后&#xff0c;今天其部分系统实际上断。网。 作者&#xff1a;佚名来源|2019-10-23 15:17 AWS警告客户&#xff0c;分布式攻击严重阻碍网络连接&#xff…