自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(164)
  • 收藏
  • 关注

原创 全面解析DFS(必看)

文章目录引用修改与解释普通的遍历方法前序中序引用在 LeetCode 94的一篇文章看到了进行树的深度遍历的方法。效果是:无论是前序中序后序都是一样的写法。这种方法被作者称为“颜色标记法”。作者为:hzhu212,原文地址这里直接附上原作者的思路分析:其核心思想如下:使用颜色标记节点的状态,新节点为白色,已访问的节点为灰色。如果遇到的节点为白色,则将其标记为灰色,然后将其右子节点、自身、左子节点依次入栈。如果遇到的节点为灰色,则将节点的值输出。class Solution:

2020-09-02 16:07:09 967

原创 2024 解决matplotlib中文字体问题

解决matplotlib中文字体乱码问题。

2024-01-15 17:03:40 398

原创 二维动态规划状态压缩的一些思考

问题对于以下一段代码:代码来源:labuladongint longestPalindromeSubseq(string s) { int n = s.size(); // dp 数组全部初始化为 0 vector<vector<int>> dp(n, vector<int>(n, 0)); // base case for (int i = 0; i < n; i++) dp[i][i] = 1;

2021-10-21 16:04:52 181

原创 一网打尽atomic, volatile, synchronized

本文的目的不在于阐述这些知识点的原理或者是底层实现,而是想从使用的角度,给予读者一种使用的感受。毕竟语言是工具,想要精通,先学会用,再学会工具是怎么造的,才是一种正确的学习路线。直接看代码和注释:package Chapter3.AboutThreadPool;import com.google.common.util.concurrent.ThreadFactoryBuilder;import org.junit.Test;import java.util.concurrent.*;.

2021-03-09 14:35:09 719

原创 关于线程池使用的很有启示的代码

这是我在学习线程池过程中边码的代码,涉及如何按阿里标准创建线程池,什么情况会出现Exception。知识背景代码请认真看注释package Chapter3.AboutThreadPool;import com.google.common.util.concurrent.ThreadFactoryBuilder;import org.junit.Test;import java.util.concurrent.*;public class T1 {// Exec

2021-03-04 13:04:24 205 1

原创 为什么ThreadFactoryBuilder不见了(不是版本问题!!!)

今天使用到了ThreadFactoryBuilder,但IDEA提示找不到。查了一下Google,排名第一的那篇文章是这么说的:程序报错ThreadFactoryBuilder类找不到,原因是jdk1.8以后就删除了该类。https://blog.csdn.net/weixin_32629733/article/details/109694928其实并不是这样的,而是ThreadFactoryBuilder来自于Google开发的Guava包。假如你使用的是maven,你必须在pom.xml中导入

2021-03-04 10:54:03 3129 5

原创 matrix multiplication

文章目录Overview of Matrix MultiplicationHow to implement Map & ReduceSpecific method 1Specific method 2Specific method 3Java codeResult analysisData file preprocessingHex and bytes and Int conversionHow to modify the number of mapper and reducerReference

2020-11-08 00:41:20 645

原创 Leetcode337 记录

本文是关于一篇文章的解读。三种方法解决树形动态规划问题这篇文章已经描述的很详尽,建议先阅读上面这篇文章。阅读完之后,我想提出以下两个结论:所谓的递归重复调用问题,主要原因出在了:跨层访问节点上。即:爷爷调用孙子节点,而父节点也将调用子节点,那么孙子节点就被调用了两次。从而造成效率降低。但单纯的,父节点只把手伸向它的直接子节点,那么是不会造成效率降低的。递归过程中,递归过程的函数调用的消耗将比直接返回数组大。下面印证一下我的观点:我将作者的思路 3,换成递归的方式来描述:public in

2020-11-07 21:29:50 93

原创 Leetcode297:序列化和反序列化

这道题进一步考察了对二叉树的理解。一开始此题没有做出来,最后看答案写了出来。答案来自手画图解』二叉树的序列化与反序列化 | 剖析两种解法答案给了广度遍历和深度遍历两种方案。下面简略的解释一下两种解法。总的来说,两种解法共同考虑的都是,在序列化时保护好 null 值的位置输出,来记录树的结构,以便反序列化恢复。DFS对于深度遍历来说,序列化的过程就是先序遍历的过程。这个无需多言。但是反序列化过程怎么做的呢?由于序列化过程生成了大量的 null 值,导致我在反序列化过程主动放弃了这种解法。其实

2020-11-06 21:27:11 159

原创 MapReduce实现矩阵乘法的一些总结

MapReduce实现矩阵乘法的一些总结文章目录MapReduce实现矩阵乘法的一些总结矩阵乘法概述MapReduce 思路具体方法 1具体方法 2具体方法 3实现代码结果分析一些杂杂碎碎Hex 与 bytes 与 Int 的转换Hadoop 环境配置本地调试本地安装 hadoop如何修改 mapper,reducer 数量参考资料矩阵乘法概述对于矩阵乘法 A(i,j)∗B(j,k)=C(i,k)A(i,j) * B(j,k) = C(i,k)A(i,j)∗B(j,k)=C(i,k),有:(i,k

2020-11-06 09:53:18 2365

原创 层序遍历总结

以 LeetCode102 作为例子:题目描述思路描述层序遍历需要用到的数据结构是队列。需要考虑的问题是:如何标识当前节点的层数。有以下三种方法:方法 1将每个节点表示为一个二元组 (node, level),这种方法效率太低,不考虑。感兴趣可以参考方法 2遍历完一层节点后,在队列中插入一个标记节点NULL,这个标记节点没有具体意义,只是标识某一层已经遍历结束。这种方法的缺点在于,假如想要在层序遍历过程中,有元素为 NULL,那么标记节点就会出现混淆。这种方法的代码我经常用,如下:c

2020-11-04 20:22:28 1450 1

原创 Leetcode 235. 二叉搜索树的最近公共祖先

题目描述方法 1假如不考虑二叉搜索树这个条件,针对任意树,寻找最近公共祖先:采用动态规划的方法:寻找当前树包含的 key 的数量。(将 p 和 q 视为 key1,key2)若找到 key 数量为 2 的节点,则寻找到结果public class Solution1 { private int key1, key2; TreeNode result; public TreeNode lowestCommonAncestor(TreeNode root, TreeNode

2020-10-28 20:26:49 77

原创 记录*:LeetCode 222

这道题我没做出来,十分挫败。看了答案之后,不仅被作者精妙的思路折服,并且还学习到了一些小技巧。这里直接贴上作者原文题目描述错误思路上面是我的错误思路。我的思路是,通过最左边的路径找到树的高度。然后寻求所有高度为 h-1的节点,最后再计算缺失的节点数,即可得到存在的总数。然而,事实时,当我在遍历高度为 h-1 的节点时,我始终找不到一个好的办法,来进行横向扫描,我总不能进行层序遍历吧,虽然可以解出来,但是把整个树遍历一遍,题目的:完全二叉树这一条件就会完全没有用。我甚至尝试用一个栈来维护所有经

2020-10-18 23:03:40 67

原创 记录:Leetcode119

题目描述这个例子比较迷惑。用下面这个:那就是用队列整一个层序遍历就完事了。思路 1直接上代码吧。public class Solution { private final List<Integer> result = new ArrayList<>(); public List<Integer> rightSideView(TreeNode root) { if (root == null) return result;

2020-10-16 20:23:36 67

原创 记录:Leetcode173

中等题,理所当然,直接解题。题目描述题目本身不难,需要额外考虑的是空间复杂度和时间复杂度的限制。想要实现 next和 hasNext 功能,照理来说只需要造一个数组即可。但问题是,数组的空间复杂的是 O(n)。那么应该怎么办呢?再看一眼条件,会发现,这棵树是二叉搜索树。思路 1对于二叉搜索树,左子树 < 根 < 右子树 是确定的。那么我们可以仅仅存储根节点,那么左右节点大小关系也就出来了。那么我为什么在上图之中把 3 也存进去了呢?因为我原来打算采用递归,那么如何在到达叶子节点之

2020-10-15 22:46:39 113

原创 记录:Leetcode124

这是一道 hard 题,但是看到题到了解到思路仅用了 5 分钟,然而最后调试以及修改枝叶错误画了半个小时。总之做出来了,开心。。。题目描述思路分析以下图是我一开始的思路。我的想法是,对于一个简单二叉树,所有情况无非就是:root,(root,left),(root,left,right),(root,right)那么从子树开始,从下至上递归,求得每个简单二叉树能够起到的最大作用传上去。当然,还有两种情况没考虑,那就是单独的(left)和(right)这两种情况是不能够传上去的。(当然不止,

2020-10-11 22:03:58 71

原创 记录:LeetCode117

打算法好快乐啊,写数学作业好烦啊。。。今天的题目是 116 的进阶版,树不再是结构完美的树。题目描述由于树不再是规则的树,因此不能考虑 116 的直接劈砍的方式。因为会出现以下情况:此时采用之前的方式,4-6 这条线无法连接。假如不考虑常量级空间,那么最直观的方法就是进行层序遍历,借助队列。解法 1public class Solution2 { public Node connect(Node root) { if (root == null) return n

2020-10-10 23:13:15 110

原创 记录:Leetcode116

文章目录题目描述思路 1思路 2经过这道题,我明白了一个道理:在具备基础知识的条件下,做不出来题往往是被自己的惯性思维局限住了。题目描述看到这里,我一开始蒙了。本来按层序遍历,直接拿个队列广度搜索就能够解决这道题,然而要求常量级空间,这意味着我几乎无法使用任何数据结构进行辅助。那还层序遍历个鬼?然后我又看到了,使用递归解题符合要求?递归解题?那就是要我遍历这个树吧?广度搜索不行,那就深度搜索吧。先序中序后序挑哪个呢?于是我进坑了,下面思路 1 就是我进坑的情况:思路 1写的很杂乱,可

2020-10-02 00:24:09 69

原创 数据库作业 1:绘制crow‘s foot图

文章目录题目要求crow's footBackground informationER relationship descriptionSales office 与 employeeSales office 与 propertyProperty 与 locationProperty 与 ownersConcluding remark题目要求根据上述的要求绘制 ER 图crow’s footBackground information由题目可以看出,本题难点主要在两部分关系。 sales o

2020-09-30 11:35:24 7037 3

原创 记录:LeetCode114

这道题,一开始毫无思路,甚至走错思路,然后经过自己画图,一点一点做出来。一次就 ac,爽到起飞。原来思路对了是这么样的感觉。这次不像往常,先贴一下结果。好了,开心完了,进入正题。题目描述看了题目,接下来复现一下心路历程。心路历程 1这个单链表,仔细一看顺序,是一个先序遍历。那我要做的就是,按先序遍历的顺序去遍历树,然后,当遍历到右节点时,将右节点接到左节点的尾巴上。(细心的人可能已经发现了,我的思路完全没考虑左右:但是当时的我没意识到这个问题,一心想的是,如何在递归过程中知道,我已经可以进

2020-09-29 22:29:56 119

原创 记录:LeetCode113

今天心情不佳,随便写写吧。题目描述思路 1和上次一样,照常递归即可。然后就会涉及一个问题:在递归过程中需要维护一个 list 变量。直接上代码:public class Solution1 { private List<List<Integer>> result = new ArrayList<>(); public List<List<Integer>> pathSum(TreeNode root, int sum)

2020-09-28 21:57:59 82

原创 Leetcode112:路径总和

题目描述思路 1public class Solution { private int sum; private boolean res = false; public boolean hasPathSum(TreeNode root, int sum) { this.sum = sum; helper(root, 0); return res; } public void helper(TreeNode roo

2020-09-23 23:31:03 67

转载 为什么样本方差(sample variance)的分母是 n-1?

转载:马同学

2020-09-23 20:58:37 124

原创 Leetcode 111:二叉树的最小深度

题目描述思路 1递归写法,没什么好说的,一遍过。直接上代码:public class Solution1 { private int min = Integer.MAX_VALUE; public int minDepth(TreeNode root) { if (root == null) return 0; helper(root, 0); return min; } public void helper(Tr

2020-09-22 20:52:36 79

原创 Leetcode 110:平衡二叉树

题目描述解释今天上了一天的课,晚上还开会,感觉好累,直接手打完没测试就过了,也不想看答案有没有其他写法。也就是通过递归来判断两个事情:左子树和右子树是否是平衡二叉树左子树和右子树的高度是多少上代码:public class solution1 { public boolean isBalanced(TreeNode root) { int helper = helper(root); return helper != -1; }

2020-09-21 22:20:15 75

原创 Leetcode 108:将有序数组转换为平衡 BST

题目描述思路 1这道题没什么好说的,其实树的专题做到现在,关于递归应该也有熟悉了。而在前面的题目中学到的一些知识点,包括:通过使用下标来缩小递归中子问题的范围巧用插入标记值熟练使用队列和栈也会在后面的题目中经常用到。这道题使用下标标识子问题即可。直接代码:public class _108 { private int[] nums; public TreeNode sortedArrayToBST(int[] nums) { this.nums =

2020-09-20 20:38:30 87

原创 Leetcode 106:从中序后序构建树

题目描述思路 1这第一种思路,我是借鉴了 105 的循环解法,对中序后序的序列进行分析,来寻求解答。如图,当前序和中序同一位置的元素相同时,表示这些点均为左节点,入栈。当遇到第一个不同的节点时,inorder 所在位置表示为某一子树的根节点到达。通过一个 father 变量标识右节点的链接。代码如下:public class Solution1 { public TreeNode buildTree(int[] inorder, int[] postorder) {

2020-09-18 22:33:56 85

原创 Leetcode105:根据前序中序构建树

题目描述思路 1我的思路主要是递归,通过不断缩小问题的规模来解决。递归的参数还是 preorder 和 inorder 两个数组,为了操作简便,preorder 保持不变,inorder 随递归加深不断缩减。边界条件:假设 inorder 只有一个元素,直接返回节点假如 inorder 为空,返回 null代码如下: public TreeNode buildTree(int[] preorder, int[] inorder) { List<Integer&

2020-09-15 22:21:12 90

原创 Leetcode107:二叉树的层次遍历 II

题目描述简单题,没什么好说的,按层次遍历,然后每层结果插入 result 结果集头部即可。代码: public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); if (root == null) return result; Que

2020-09-14 22:31:28 55

原创 Leetcode103:二叉树的锯齿形层次遍历

题目描述此题算是 102 的一个拓展版。如何层序遍历已在 102 文章讲过,这里主要讲如何在输出时采用 zigzag 输出。思路一将每一层遍历后的结果视情况进行翻转。代码如下:public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<>(); if (roo

2020-09-13 21:54:04 84

原创 Leetcode102:二叉树层序遍历(心路历程)

题目描述思路 1使用一个容器来存储每一层的节点。然后撤出所有节点后再加入它们的所有子节点。本来觉得应该建立两个容器,一个容器装当前层,另一个容器一次装入它们的孩子。但是这种做法处理起来很麻烦,浪费空间。问题的关键是:如何将当前层与子层分开,因此我只需要在当前层和子层中间插入任意一个特殊节点标记为当前层结束即可。这里,我将这个特殊的标记节点设为 null代码如下:class Solution { public List<List<Integer>> level

2020-09-12 20:59:17 122

原创 Leetcode 101:对称二叉树(心路历程)

题目描述思路分析这个题拿到手上,第一个思考的就是:如何正确的去解读“镜像对称”。第一个想法就是:既然每个形态不同的树,中序遍历结果不同,那么直接对树进行中序遍历,然后比较数组是否对称即可。如上述问题描述中,第一个例子的中序遍历为:【3,2,4,1,4,2,3】,显然以中点对称。第二个例子的中序遍历为:【2,3,1,2,3】,那么无法满足要求。正当我兴高采烈地秒完中序遍历直接提交时,出错了。。。当面对这个树时,中序遍历结果是对称的。思路二究其原因,是由于中序遍历结果把 null 忽略掉没有

2020-09-11 20:57:49 71

原创 Leetcode 100: 相同的树

文章目录题目描述思路题目描述思路与 98 题相同,直接采用树的中序遍历,然后进行比较即可。当然,采用前序或者后序都可以。这里直接贴上代码:class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } else if (p == null &&am

2020-09-02 15:56:43 66

原创 Leetcode 98: 验证二叉树

文章目录题目描述想法 1想法 2想法 3题目描述想法 1采用递归的方式,判断左节点小于根,右节点大于根。结果:错误。错误案例为:原因:右孩子的左孩子(右孙子)可能小于父亲。 6 < 10,出错。想到的解决方案:在递归过程中吧祖先记录下来,用以后续的比较。想法 2在递归过程中加入祖先,并且加入 bool 标识指示是左孩子还是右孩子。public class Solution1 { public boolean isValidBST(TreeNode root) {

2020-09-01 13:20:18 103

原创 vector-Jacobian product 解释 ---- pytorch autograd

这篇文章将要解释pytorch autograd的运行机制和设计原因。文章由pytorch 官方文档中的这段话引出。首先,雅各比矩阵J计算的是向量Y对于向量X的导数。这里假设向量X[x1,x2,...,xn]是某个model中的weight。而Y[y1,y2,...,yn]进而由X经过某个函数f产生。那么在backpropagation时,我们要求得就是这个雅各比矩阵J那么为什么又要求v...

2020-03-11 18:25:54 981

原创 pycharm can't find libcublas.so.9.0(终极解决整合版)

问题如下:下载了tensorflow-gpu后,在远程服务器终端跑代码,可以成功,但在pycharm上面跑,却一直报错:ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory查阅了很多资料,包括以下这些:Tensorflow在Pycharm中报错 :找不到 libcu...

2020-03-05 22:59:18 340

原创 最全pytorch/tensorflow环境配置踩坑记

今天老师给了两个服务器,给我做深度学习用。因此我就来装pytorch和tensorflow。此文略去anaconda安装。按理来说,可以直接用docker来装环境。但由于我没有root权限,因此我没办法这么做。。。。pytorch因此我看了一下自己的cuda和cudnn版本号,如下:cuda9.0没办法安装最新版pytorch,因此登陆pytorch官网查阅旧版本【旧版本】命令打进...

2020-02-10 23:21:19 2030

原创 html form 踩坑记

写了一个form,代码如下:<form action="http://127.0.0.1:8000/authenticate.php" method="post"> <div class="form-group"> <div class="form-label-group"> <input type="text" id="inpu...

2019-10-17 15:37:33 248

原创 箭头函数this指向问题

看了这个的issue,和一道这样的面试题:你说箭头函数没有自己的this,那(()=>{}).bind(this)可?我想对箭头函数的this指向问题做一点总结如有错误缺漏,欢迎指出先出结论:箭头函数没有自己的this,而是在定义时继承来自外层函数(非箭头函数)的this实验1var a = 12;()=>{ console.log(this.a);...

2019-10-11 16:07:38 160

原创 原生js实现ajax

function ajax(myjason) { var xhr = null; window.XMLHttpRequest?(xhr = new XMLHttpRequest()):xhr = new ActiveXObject("Microsoft.XMLHTTP"); var method = myjason.method || "get"; var url = myjason.u...

2019-10-11 15:53:15 96

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除