Ryo's blog

归档 · 2021

首页

关于

归档

DataStructure

遍历二叉树的几种思路

一、背景最近在公司面试(一面、二面)候选人的时候,大多数候选人基本都能正确的写出非递归版的前序遍历和中序遍历二叉树,但是大多数人都不能正确的写出非递归版的后续遍历。跟一个曾经拿过NOI银牌同事私下讨论了下后续遍历算法到底难不难。结论是,说难也难说不难也不难,说不难是因为,如果你看过相关解法,你可以很快就就理解解法的思路。说难,是如果你没看过,或者看了过了很久又忘了,要在15分钟左右写个Bug free的版本还是有点难的。 跟同事讨论下二叉树遍历的几种写法,所以就有了这篇文章。 二、二叉树几种解法的思考2.1 递归版前序遍历递归 func preOrderRecursion(node *TreeNode, ans *[]int) { if node == nil { return ..

更多
LinearAlgebra

MIT - 线性代数

一、Lesson 11.1 方程组的几何解释 上面方程组我们可以写成矩阵形式 上面的矩阵可以看成 Ax = b的形式 : 系数矩阵(A):将方程系数按行提取出来,构成一个矩阵 未知向量(x):将方程未知数提取出来,按列构成一个向量。 向量(b) :将等号右侧结果按列提取,构成一个向量 1.1.1 行图像在坐标系上画出“行图像”,可以知两个线交点就是我们要求的解 1.1.2 列图像从列图像的角度,我们再求这个方程可以看成矩阵: 1.2 方程组的几何形式推广1.2.1 高维行图像我们将方程维数推广,从三维开始,如果我们继续做行图像求解,那么会的到一个很复杂的图像。 矩阵如下: 如果绘制行图像,很明显这是一个三个平面相交得到一点,我们想直接看出 这个点的性质可谓是难上加难,比较靠谱的思路是先联..

更多
Golang

深入理解 Golang Stack

一、基础知识1.1 Linux 虚拟地址空间布局我们知道CPU有实模式和保护模式,系统刚刚启动的时候是运行在实模式下,然后经过一系列初始化工作以后,Linux会把CPU的实模式改为保护模式(具体就是修改CPU的CR0寄存器相关标记位),在保护模式下,CPU访问的地址都是虚拟地址(逻辑地址)。Linux 为了每个进程维护了一个单独的虚拟地址空间,虚拟地址空间又分为“用户空间”和“内核空间”。 虚拟地址空间更多相关可以看Linux内核虚拟地址空间这篇文章。 1.2 Golang 栈和虚拟地址空间栈的区别Golang 的内存管理是用的 TCMalloc(Thread-Caching Malloc)算法, 简单点说就是 Golang 是使用 mmap 函数去操作系统申请一大块内存,然后把内存按照 ..

更多