vim教程
vim基础1.模式区分分为normal还有iinsert
norm是倒过来,insert是输入
:这个是是command命令模式
2.缓冲区和窗口vim也开开启多个tab
使用:sp可以进行分区
使用:tabnew创建一个行窗口,一个窗口多个buffer
使用:qa进行全部关闭窗口
3.文本编辑使用w是向后,b是向前,e是单词结尾,使用s开头,$是结尾
浏览模式,使用u(向上),使用D(向下)
查找模式使用f,后面加要查找的单词
以上都是normal模式
下面是insert模式
使用d进行删除,使用u进行undo,删除到结尾就是de(delete end)
dd删除一行,cc是删除后给一个空白的给你(d和c差不多)
u是undo, ctrl+r是重做
y是粘贴,p是赋值
4.visual模式这个就是进行多选使用的,按住v进入
然后使用y进行赋值,p紧张粘贴
5.计数模式就是使用4j,线下跳转4行,就是前面加上数字
6.修饰词i是inside ,a是all
使用da(,会删除所有的值,在(,包括()
使用/进行查找,n进行查找下一个符合的
shell教程
0.shell脚本0.1shell赋值一般使用双一号,这样可以进行输出
使用方法和python的f差不多,直接使用$
12345foo=barecho "$foo"# 打印 barecho '$foo'# 打印 $foo
0.2shell进行函数变换如何使用sh脚本,直接加载到source,使用source保存,然后直接运行函数
&1-9是保存的函数变量,
经常会遇到权限不够的问题,写入,或者读取,那么只要使用sudo!!,就可以执行上面一个权限不够的命令
grep是查找函数 ,$?代表是不是有错误,正确就是0(没有错误,0个错误)
这里的||的意思是第一个不对,就执行第二个
目前看来这里的||还有&& 都是相反的,一个是只有,一个是或者
使用()代表的是全局变量,局部自定义的变量不需要括号,linux命令
例题讲解
0代表函数的名称, &#代表参数的数量(#是number的意思) $$代表当前运行的pid
$@ - 所有参数 读取参数
-ne是不相等就代表错误
for循环所有的参数, ...
换电脑更新hexo
换电脑更新hexo
因为更换电脑之后,原始数据在之前的电脑,所以博客一直没有更新。最近为了,监督自己复盘,花费两天重新折腾 了一下博客。本来想着把博客迁移到hugo,结果hugo,更新的教程还没有hexo教程多。而且我这个github.io的域名已经使用了。如果更新hugo。就得把这个仓库的数据清空。(主要是折腾两天了,githubpage使用action自动更新还比较繁琐)。所以才换回hexo。下面我来复盘一下这两天的折腾过程。
1.更换hugo主要参考的是这个up的教程。
Hugo + GitHub Action,搭建你的博客自动发布系统 · Pseudoyu
1.1hugo本地搭建本地搭建参照这个up没有任何问题,主要是要把下载的主题里面的example文件复制下来,然后更新config。toml文件,注意这里的坑点(需要解析自己baseurl为自己github的地址)不然搭建之后直接跳转到example的网站,让我以为是自己搭建问题,折腾了几个小时。然后就没有什么坑点了
1.2域名购买为了贯彻讲白嫖进行到底的思想,我本来想着是使用freenom进行搭建一个 域名。但是一直购买 ...
5.3.11删除以x为根的子树
题目大意删除以x为根节点的所有子树,注意可能有多个为x值
思路
先递归删除所有节点
可能有多个值是x,所以用层序找出他们的父节点,然后删除x,同时设置父节点的子节点为空
代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051/* * 删除每个以x为值的子树(可能有多个,父节点智能用层序找到) * 1.递归删除节点 * 2.层序找到后调用1 */void del(TreeNode* root){ if (root== nullptr){ return; } del(root->left); del(root->right); free(root); //释放节点}void searchDel(TreeNode *root,int x){ if(root== nullptr){ return; } ...
王道5.3.7完全二叉树的判定
题目大意给定一个二叉树,确定它是否是一个完全二叉树。
百度百科中对完全二叉树的定义如下:
若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)
示例 1:
输入:[1,2,3,4,5,6] 输出:true 解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/check-completeness-of-a-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路根据层序遍历,设置flag标志是否出现过null,如果出现null,设置flag为1.如果存在当前节点,判断当前flag如果是1,就直接返回false,不是就把他的左右节点加入(无论他的左右节点是否存在),接着层序。
代码实现12345678910111213 ...
王道5.3.5
题目大意给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例: 给定二叉树 [3,9,20,null,null,15,7],
13
/ \ 9 20 / \ 15 7 返回它的最大深度 3 。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
通过层序遍历来获取
queue记录当前层的所有元素,用for遍历这一层的元素加入他的左右节点,for结束就是一层结束
代码实现1234567891011121314151617181920212223242526272829303132333435363738/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *lef ...
王道5.3_2_3非递归后续遍历
题目大意给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3
输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗?
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.思路构建模板
1234567891011while( 栈非空 || p 非空){if( p 非空){}else{}}
填写步骤
p非空一直左压
然后,如果是空的,获取栈的顶端,如果右节点也是空的或者访问了的就是p.right=pre,那么就直接访问当前的,并把p给pop出来,同时设置pre=p,标志访问,*同时设置p=null(否则下一次p会进入if判断,然后一直压)*
如果不是空的,并且没有访问,那么把p=p.right,他就会进入之前的if,一直左压 ...
kmp数组求法
1.next求法例如s=‘abcac’,首先从第一位a开始,设置a为0(如果是-1,后面的都不需要+1),第二个是b,b的前面子串是a,没有匹配的设置成0+1,接下来是c,前面子串是ab,同理设置为0+1,下一个a也是0+1,最后是c,前面子串是abca,他的前缀子串a和后缀a相等,设置成1+1,所以next={0,1,1,1,2}
2.nextval求法例如,s=‘aaaab’,next={0,1,2,3,4,},第一个是a,i=0,设置naxtval=0,i++.第二个是a与第一位相同,设置nextval【2】=nextval【1】=0,i++,第三个是a与第i个相同就是nextval【3】=nextval【2】,第四个与第3个也相同,也是nv【4】=nv【3】,第5位是b与第4位是a不同,i不加,nextval【5】=next【5】=4,所以nextval={0,0,0,0,4}