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

199. Binary Tree Right Side View

思路:想要得到树的每一层最右侧元素值,用BFS最方便。先访问左节点再访问右节点,最后访问的一个值就是留下的值。
想要DFS的思路也可以。只是一定要访问所有节点。
这里写图片描述
代码

491 Increasing Subsequences

思路:我的习惯思维是对于nums[idx]可以选择取或者不取。取的话,在什么条件下可以取。满足什么条件的结果可以记录到结果中。想好这些就能写代码了。
本题:list记录上一步已经取的数字。如果if (list.size() == 0 || nums[idx] >= list.get(list.size()-1)) 的时候就可以取当前元素到列表。只要list.size 大于等于2 就可以加入结果集。题目还需要去重。
学习:还有一种dfs的思路是:findSequence(int[] nums, int idx, Deque<Integer> list, Set<List<Integer>> result) 前一步放入list中的最后一个元素的下标是idx-1,当前可以决定继续加入的元素是从idx到数组末尾中的任何一个元素,当然元素也是要符合条件的。
代码

785. Is Graph Bipartite?

思路:要把所有的顶点(下标)分为两个集合lista 和listb。先往lista加入节点0。和0相邻的点加listb。再不断遍历lista和listb,加入新的节点。如果相邻节点在同一个list中那就返回false。代码啰嗦笨拙,参见isBipartiteV2。
学习1:用colors数组来区分两个集合。-1认为还没有加颜色;0为一组;1为另外一组。在加颜色过程中使用DFS的思路。
例如输入: [[1,3], [0,2], [1,3], [0,2]]。
染色顺序:从0到1;从1到2;从2到3;3的邻边已经染色完成,判断是不是有效就行。
学习2:思路同上。在加颜色过程中使用BFS的思路。
例如输入: [[1,3], [0,2], [1,3], [0,2]]。
染色顺序:从0到1;从0到3;1,3加入队列;一边染色,一边判断是否有效;
从1到0,从1到2;2加入队列;一边染色,一边判断是否有效;
从3到0,从3到2;一边染色,一边判断是否有效;
从2到1,从2到3;
代码

129. Sum Root to Leaf Numbers

思路:深度优先的套路。在处理每个当前节点node的时候把它当做根节点,继续dfs;找到node与其根节点关系,再定返回值。
代码

200. Number of Islands

思路:用DFS的思路很简单。找到一个岛屿的起点(i,j),不断向4个方向扩散,把相邻的节点都改为2。这样一次完整的dfs遍历算是一个岛屿识别完成。接着再找下个岛屿的起点。
学习:UnionFind并查集思路。将二维的grid,用一维数组表示父节点信息。
代码

116. Populating Next Right Pointers in Each Node

思路:dfs的话,先遍历一个节点的右子树,在同一深度保持尽可能的右侧节点。但是当同一层的节点称为别的节点的next后,当前节点就成为该层右侧节点了。用一个map来存储。
学习:同一层次的节点向右指向next,其实用BFS的思路最好。不过看别的代码,这次BFS没有使用queue来解决,而是巧妙的使用了dummy.next和节点next,将同一层的节点连起来。是学习的地方。
代码

114. Flatten Binary Tree to Linked List

思路:dfs的思路。今天的收获是:起一个好的方法名字有利于自己思路形成。以前的代码都直接将方法命名为dfs,其实不知道在做什么。今天的方法名flattenNode,是对node这一个节点做展开。能够理清楚一个节点做展开应该做哪些事情,递归就好写了。
这里写图片描述        这里写图片描述
观察发现,例如处理node3,不需要做什么事情。处理node2,能看到node4变成了node3的右子树;node3变成了node2的右子树。得出如果有左子树,那么左子树称为node的右子树,原来node的右子树成为现在node右子树叶子节点的右子树。把node的左子树置为null。
代码

802. Find Eventual Safe States

思路:开始不能明白k的作用,不能明白例题中0,1,3节点为什么就不可以。
我理解的5,6出度为0,5,6是terminal node,肯定是safe state。节点2,节点4可以走到节点5,所以节点2,节点4也属于safe state。节点0,节点1可以走到节点2,那么节点0,节点1也应该是safe state。
节点3能够走到节点0,那节点3也是safe state。所以0,1,2,3,4,5,6应该都是safe state。
但题目中有句话是:starting node is eventually safe if and only if we must eventually walk to a terminal node.“ if and only if ”说明是可以并且只能走到safe state。
节点0可以走节点2,到达节点5,;但是同时节点0还可以走到节点1,节点3,再到节点0。没有任何证据表名节点1,或者节点3不是terminal node,所以节点0也就不是safe state。也就是不符合 if and only if。这就清楚了,一个节点如果它的出度为0或者链接的节点都是safe state的,那它才是safe state。
学习:从一个节点开始深度优先进行搜索。如果能够走到终点并且只能走到终点则认为无环,是一个safe state。我们将访问节点的不同状态称为 白-灰-黑:还没有开始访问节点是白(0),开始访问一个节点是灰(1),访问一个节点结束是黑(2)。
如果在访问节点A的过程中遇到了灰色的节点B,那么说明A在一个环内。A不是一个safe state。
如果在访问节点A的过程中所有的路径都能达到一个terminal node,没有进入环内,则A是一个safe state。
时间复杂度O(N+E) N是顶点数,E是边数。
代码

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

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

相关文章

[Leetcode][第60题][JAVA][第k个排列][回溯][DFS][剪枝]

【问题描述】[中等] 【解答思路】 1. 回溯搜索算法 剪枝 &#xff0c;直接来到叶子结点 时间复杂度&#xff1a;O(N^2) 空间复杂度&#xff1a;O(N) import java.util.Arrays;public class Solution {/*** 记录数字是否使用过*/private boolean[] used;/*** 阶乘数组*/priv…

机器学习中的数学--数学知识复习

机器学习 机器学习三个部分&#xff1a;编程能力数学统计知识业务知识 机器学习分类 1 监督学习&#xff1a;例如分类、房价预测 2 无监督学习&#xff1a;例如聚类 3 强化学习&#xff1a;例如动态系统、机器人控制系统 机器学习算法 是否连续无监督有监督连续聚类 &am…

【数据结构与算法】【算法思想】拓扑排序

一、拓扑排序 拓扑排序是基于依赖关系的节点&#xff0c;根据依赖关系而生成的序列。节点和依赖关系往往要生成有向无环图。类似的问题有&#xff1a;穿衣服裤子的先后关系&#xff0c;生成穿衣序列/专业课程与前置课程形成的课程学习序列/代码编译依赖关系形成的编译顺序序列…

java面试题5 牛客:下列关于JavaBean的说法正确的是:

下列关于JavaBean的说法正确的是&#xff1a; A:Java文件与Bean所定义的类名可以不同&#xff0c;但一定要注意区分字母的大小写 B:在JSP文件中引用Bean&#xff0c;其实就是用语句 C&#xff1a;被引用的Bean文件的文件名后缀为.java D:Bean文件放在任何目录下都可以被引用…

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

473. Matchsticks to Square 思路&#xff1a;有n根长度不一的火柴&#xff0c;这些火柴可以拼接在一起&#xff0c;但不能被折断。这些火柴能够围城一个正方形吗&#xff1f;每个火柴可以并且必须使用一次。分析得到每个边的长度应该是所有火柴长度和的1/4。接下来就是将火柴…

java面试题6 牛客:哪个关键字可以对对象加互斥锁?

哪个关键字可以对对象加互斥锁&#xff1f;&#xff08;&#xff09; A synchronized B volatile C serialize D static synchronized的4种用法 1.方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能有一个线程进…

[Leetcode][第347题][JAVA][前K个高频元素][优先队列][堆][遍历set/map]

【问题描述】[中等] 【解答思路】 1. 堆 复杂度 class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> occurrences new HashMap<Integer, Integer>();for (int num : nums) {occurrences.put(num, occurrences.getOrDefault…

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

576. Out of Boundary Paths 思路&#xff1a;这道题目难倒了我。最直接的思路是暴力搜索。要注意的问题1是需要仔细观察Example2&#xff0c;轨迹不同意思是可以从A点到B点&#xff0c;再从B点到A点也可以&#xff0c;只要step够用。所以暴力搜索&#xff0c;在(i,j)点在步骤…

java面试题7 牛客:关于AWT和Swing说法正确的是?

关于AWT和Swing说法正确的是&#xff1f; A Swing是AWT的子类 B AWT在不同操作系统中显示相同的风格 C AWT不支持事件类型&#xff0c;Swing支持事件模型 D Swing在不同的操作系统中显示相同的风格 AWT和Swing都是java中的包。 AWT(Abstract Window Toolkit)&#xff1a;…

bwa比对软件的使用以及其结果文件(sam)格式说明

一、bwa比对软件的使用 1、对参考基因组构建索引 bwa index -a bwtsw hg19.fa # -a 参数&#xff1a;is[默认] or bwtsw&#xff0c;即bwa构建索引的两种算法&#xff0c;两种算法都是基于BWT的&#xff08;BWT search while the CIGAR string by Smith-Waterman alignment.…

java面试题8 牛客:在Web应用程序中,( )负责将HTTP请求转换为HttpServletRequest对象

在Web应用程序中&#xff0c;( )负责将HTTP请求转换为HttpServletRequest对象 A Servlet对象 B HTTP服务器 C Web容器 D JSP网页 首先我们来看看web程序的整个过程 web的基本工作流程 首先&#xff0c;我们先来思考一下我们平常在上网浏览网页时候的场景&#xff0c;…

2018-2019-2-20175225 实验四《Android开发基础》实验报告

一、实验报告封面 课程&#xff1a;Java程序设计 班级&#xff1a;1752班 姓名&#xff1a;张元瑞 学号&#xff1a;20175225 指导教师&#xff1a;娄嘉鹏 实验日期&#xff1a;2019年5月14日 实验时间&#xff1a;13:45 - 21:00 实验序号&#xff1a;实验四 实验名称&#xff…

【小技巧】【Java】 创建指定数目m的Set数组

1. Set[] 并初始化 Set[] sets new Set[m]; //均会指向同一对象 // Arrays.fill(sets,new HashSet()); for(int i 0;i<m;i){sets[i] new HashSet<Integer>();}2. Stream 流 Set[] sets Stream.generate(HashSet::new).limit(m).toArray(Set[]::new); for循环初始…

第七十六期:3000台服务器不宕机,微博广告系统全景运维大法

微博现在日活达到了 2 亿&#xff0c;微博广告是微博最重要且稳定的收入来源&#xff0c;没有之一&#xff0c;所以微博广告系统的稳定性是我们广告运维所有工作中的重中之重。 作者&#xff1a;孙燕来源 微博现在日活达到了 2 亿&#xff0c;微博广告是微博最重要且稳定的收入…

第六章小结

本章&#xff0c;我们学习了图。 首先是图(GRAPH)的定义 一种非线性数据结构&#xff0c;由有穷、非空的点集V(G)和边集E(G)组成。当G中的每条边有方向时&#xff0c;称G为有向图&#xff0c;有向边&#xff08;用一对尖括号<a,b>&#xff09;又称为弧&#xff0c;起始顶…

753 Cracking the Safe

方法一 Hierholzer’s Algorithm 相关概念&#xff1a; 1 欧拉路径&#xff1a;在无向图中&#xff0c;每个边只经过一次&#xff0c;形成的路径。在有向图中&#xff0c;是指每条有向边只使用一次&#xff0c;形成的路径。 2 欧拉回路&#xff1a;欧拉路径是一个环。 3 在…

java面试题9 牛客:不同的服务器之间,哪种通信方式是不可行的

在一个基于分布式的游戏服务器系统中&#xff0c;不同的服务器之间&#xff0c;哪种通信方式是不可行的&#xff08;&#xff09;&#xff1f; A管道 B消息队列 C高速缓存数据库 D套接字 首先看到这道题我是懵逼的&#xff0c;我们分别介绍一下各个的概念 管道为运行在同…

[Leetcode][第77题][JAVA][组合][回溯]

【问题描述】[中等] 【解答思路】 1. 回溯 class Solution {List<List<Integer>> lists new ArrayList<>();public List<List<Integer>> combine(int n, int k) {List<Integer> list new ArrayList<>();backTrace(list, n, k, 0)…

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

472 Concatenated Words 思路&#xff1a;将词典使用Trie树表示。对于输入的词word&#xff0c;在Trie树上找&#xff0c;当遇到一个isWordtrue的节点&#xff0c;查看剩下部分的词是否在词典中。 例如输入 [“cat”,”cats”,”catsdogcats”,”dog”,”dogcatsdog”,”hipp…

目标检测近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; …