自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 资源 (2)
  • 收藏
  • 关注

原创 牛客 BM83 字符串变形(大小写转换,字符串反转,字符串替换)

字符串反转,截取子串,字符串替换,大小写转换

2022-06-29 10:44:35 462 1

原创 leetcode数组中的第k个最大元素或剑指offer数据流的第K大数值

方法1:快速排序的partiton结合减治法。方法2:小顶堆。

2022-06-03 13:18:49 332

原创 leetcode75. 颜色分类

采用双指针,类似快速排序的`partition`,将pivot设置为1.

2022-06-03 12:59:47 311

原创 leetcode 114. 二叉树展开为链表

题目二叉树展开为链表思路1由于函数签名的返回值为void,也就不能使用辅助链表+前序遍历的方式。采用分解的方法,通过递归,拆解为子问题。子问题为将左子树和右子树转为链表。子问题解决后,再将左子树变成右子树,原右子树接到新的右子树(原左子树)的最右边。代码class Solution { public void flatten(TreeNode root) { if(root == null) return; // 分解的思维 flat

2022-05-28 10:42:31 134

原创 leetcode 54. 螺旋矩阵

leetcode:54. 螺旋矩阵牛客:BM98 螺旋矩阵模拟法参考代码随想录:代码随想录-螺旋矩阵首先,需要确定定义边界的规则,从而确定模拟的区间,比如采用左闭右开,左闭右闭等。本题建议采用左闭右开,也就是起点闭合,终点打开。其次,循环次数也很重要,用来确定模拟什么时候结束。本题每转一圈是走2行和2列,因此模拟次数为行数和列数中最小值的一半。如果为奇数行或奇数列,每次走2行2列,最后会剩下1行或1列,因此最后需要模拟打印剩下的1行或一列。import java.util.ArrayL.

2022-05-15 14:46:10 192

原创 链表中环的入口节点或环形链表Ⅱ

题目牛客:链表中环的入口节点Leetcode:环形链表Ⅱ题目分析第一件事,判断是否有环,如果没有就直接返回null;第二件事,找到环的入口;思路使用双指针法判断是否有环,初始时,快慢指针都指向头结点,之后慢指针每次走1步,快指针每次走2步。如果有环,则快慢指针一定会相遇。如上图所示,假设环的入口节点为a,环的长度为b,假设相遇点为m。可得相遇时,慢指针走了m步,快指针走了2m步。快指针先走到m点,之后在环里转了n圈又回到m点,之后两指针相遇。可得快指针走的步数2m = m + nb

2022-05-13 20:52:41 157

原创 leetcode541. 反转字符串 II

题目:541. 反转字符串 II思路本人想法:通过计数器,计数到2k时,翻转前k个,剩余的最后翻转。不过这种思路没有通过要求的全部案例,只能AC一部分案例。学习正确做法将翻转情况分为2种情况第一种:剩余字符数大于等于k个,则翻转前k个;第二种:剩余字符数小于k个,则全部翻转。class Solution { public String reverseStr(String s, int k) { char[] ch = s.toCharArray(); int start = .

2022-03-16 21:12:51 783

原创 leetcode59. 螺旋矩阵 II

题目链接:59. 螺旋矩阵 II考点:模拟,边界定义。方法一将循环一圈定义为填充一次上、右、下、左。在循环填充过程中,要定义填充的起点和终点的边界,本解法采用左闭右开的边界。左闭右开解释:填充上侧时,包含左边界,而不包含右边接;填充右侧时,包含上边界,而不包含下边界;填充下侧时,包含右边界,而不包含左边界;填充左侧时,包含下边界,而不包含上边界。上图每一种颜色代表各自遍历时的长度。class Solution { public int[][] generateMatrix(i.

2022-03-13 17:37:15 468

原创 Vim拼写检查、超管保存文件等

拼写检查在命令模式下,开启:set spell,关闭:set nospell开启拼写检查后,普通模式下Vim拼写检查器的基本命令命令用途]s跳到下一处拼写错误[s跳到上一处拼写错误z=为当前单词提供更正建议插入模式下,使用<Ctrl-x>s获取拼写检查更正建议,与z=建议一样。配置快捷键,修改.vimrc,添加如下代码map <leader>sc :set spell!<CR>inoremap <C-x

2022-03-02 14:06:16 297

原创 Vim折叠操作(折叠代码、折叠函数、方法、类等)

折叠手动折叠(默认折叠方式)折叠操作符z。普通模式下的折叠操作折叠也是一个操作符,所以它也遵循语法规则,即动词 + 名词。启动折叠操作符zf,后面可以接动作(motion)或文本对象(text-object)确定折叠的范围。zf里的f盲猜为fold。举例zfi{ # 折叠光标当前所在的大括号{里面的文本zfa{ # 折叠光标当前所在的大括号{里面的文本和大括号本身zfG # 从当前光标所在行开始,折叠到文件尾zf10j # 从当前光标所在行开始,

2022-03-02 14:05:40 10047

原创 Vim标签使用及标签生成器

标签标签生成器推荐安装:universal ctags生成基本的标签文件ctags -R .大型项目生成标签使用--exclude来排除一些不需要的文件或目录。举例# 排除git,logctags -R --exclude=.git --exclude=log .标签导航普通模式使用ctrl-]跳转到标签对应的定义处,ctrl-t跳回原处。命令模式使用:tag 标签名,跳转到定义,:pop跳回。标签优先级并非所有的标签都有着相同的地位,一些标签有更高的优先级。如

2022-03-02 14:05:17 385

原创 Vim中的寄存器

VIM的寄存器Vim操作的是寄存器而不是系统剪贴来存储缓存。普通模式下,从某个特定的寄存器中读取文本的通用语法是"x,其中x是寄存器的标志。默认使用修改c或d删除或y复制的内容都放到了"匿名寄存器"。比如用x删除一个字符放到无名寄存器,然后p粘贴,可以调换字符。插入模式下,取出某个寄存器里面的内容放入到当前缓冲区中的方法为ctrl-r x,其中x是寄存器的标志。# 查看寄存器里面缓存的内容:reg [寄存器名称]:reg # 查看当前所有寄存器:reg + # 查看剪贴板寄存器

2022-03-02 14:04:58 1563

原创 Vim文本对象

文本对象(text-object)提高字符操作效率​ VIM中也有文本对象的概念,比如一个字符、一个单词、一段句子、一个段落等都是文本对象。文本对象的作用:通常用来表示范围。文本对象操作方式[number]<command>[text object]number表示操作个数或次数。command表示命令。text object表示要操作的文本对象,Vim默认提供的常用文本对象有单词为w,词组为W,句子s,段落p,双引号",单引号’,`,大括号{或},小括号(或),中括号[或

2022-03-02 14:04:32 364

原创 vim可视模式(选择模式)常用操作

可视模式退回到普通模式下再进入可视模式。三种可视模式v # 逐字符可视模式(选中)V # 逐行可视模式(选中)ctrl+v # 逐块可视模式(选中)前面加上数字可以选中多个;结合文本对象或动作motion可以快速选中;选中后,可对选中的文本执行普通模式下的命令,比如c,d,y等操作符;举例viw # 选中一个单词,不包括空格vaw # 选中一个单词,包括空格5V # 从当前行开始起,向下选中5行可视模式导航在可视模式中,使用o或O会让光标在高亮选

2022-03-02 14:04:14 2206

原创 vim多文件操作(多个buffer)

多文件操作可配合窗口分屏、选项卡使用更佳。参数列表:args # 查看创建的文件参数列表:args file... # 为指定的多个文件创建文件参数列表:argdo # 为参数列表里面的所有文件执行同样的命令,同时操作多个文件:m,n argdo # 对参数列表中m到n个文件执行操作:arga # 追加新文件到参数列表中:argdo update # 保存参数列表里所有文件的修改遍历参数类别:first # 跳到参数列

2022-03-02 14:03:54 873

原创 VIM替换(替换单个、一行、全文)

替换语法:[range] s/{old-pattern}/{new-pattern}/[flags]range确定范围,不写默认为当前行。% # 表示整个文件内容. # 表示当前行$ # 表示最后一行m,n # 表示从第m行到第n行,n # 表示从当前行到第n行n, # 表示从第n行到当前行n # 指定行+n # 表示当前行之后的n行old-patte

2022-03-02 14:03:30 11073

原创 Vim搜索(查找代码、字符串等)

搜索(查找)# 搜索模式/ # 前向搜索匹配? # 反向搜索匹配# 移动定位n # 跳到下一个匹配的位置N # 跳到上一个匹配的位置* # 对光标当前所在的完整单词进行前向搜索匹配# # 对光标当前所在的完整单词进行后向搜索匹配g* # 前向搜索光标当前所在单词g# # 反向搜索光标当前所在单词搜索时字母大小写情况设置# 设置vimrc文件# 当输入的搜索词全部是小写时,忽略大小写;搜索词至少有一个大写字母时,进行大小写匹配搜索set ignorecase

2022-03-02 14:03:15 16003

原创 Vim命令模式常用快捷方式

命令模式退回到普通模式下再进入命令模式。有些资料称为Ex命令。命令模式快捷键ctrl-h # 删除一个字符ctrl-w # 删除一个单词ctrl-u # 删除整行ctrl-b # 移动到该行的开始ctrl-e # 移动到该行的结束shift-left # 光标左移一个单词shift-right # 光标右移一个单词命令模式支持一些终端里面的快捷操作,比如tab补全提示,ctrl+h删除,ctrl+p上一个命令等。多窗口编辑(

2022-03-02 14:03:02 430

原创 Vim插入模式(插入命令、快速插入方法)

快速插入直接插入i # 在光标前面一个位置插入a # 在光标后面一个位置插入I # 从当前行第一个非空字符的前一个位置插入A # 在当前行尾插入o # 在光标所在行的下面新插入一行O # 在光标所在行的上方新插入一行gi # 从当前缓冲区buffer上次结束输入模式的地方开始插入 gI # 从当前行的第一列的位置开始插入 先删除,再插入,并结合文本对象使用s # 删除光标所在字符,并插入;先按数字可向前删除多个字符

2022-03-01 22:22:20 10375

原创 Vim分屏(多窗口布局)

多窗口编辑(分屏)开启多个窗口<Ctrl+w>s # 水平分割,先按ctrl+w,再按s<Ctrl+w>v # 垂直分割,先按ctrl+w,再按v窗口切换切换窗口的命令都是使用Ctrl+w作为前缀# Ctrl简写为C<C+w>w # 在窗口见循环切换<C+w>h # 切换到左边窗口<C+w>l # 切换到右边窗口<C+w>k # 切换到上边窗口<C+w>j # 切换到下边窗

2022-03-01 22:19:11 4417

原创 Vim合并代码、格式化代码、切换大小写

快速合并J # 将下面一行合并到本行后面,先按数字可合并多行快速格式化代码gg=G # gg回到文本开头,=表示自动缩进,G跳到行尾大小写切换~ # 字母大小写切换

2022-03-01 22:17:01 124

原创 Vim宏的使用

宏(macro)批量重复执行一组操作宏的主要作用高效的完成同样的一组操作,比如批量插入、批量删除、批量修改。宏的使用普通模式下启动宏# 1. 录制宏(1) 普通模式下按q,之后跟上宏名(也就是要使用的寄存器名,可以为a-z,用寄存器来存储宏操作),就开始录制了;(2) 一组操作,比如编辑文本ing...(3) 普通模式下按q,停止录制。# 使用(回放)宏# 方法1:命令模式下使用,结合可视模式(1) 选中要批量操作的文本区域,比如用可视模式选中;(2) 再按:进入命令模

2022-03-01 22:13:41 1622

原创 Vim使用.(点命令dot)来重复上一次修改操作

点命令重复操作点命令.用于重复最近一次改变文本的操作或上一个修改操作,帮助文档:h .. # dot命令用于重复上一次命令改变文本的操作:比如采用普通模式下的命令(添加,修改,删除)来更新当前缓冲区的内容时,就属于改变操作。但是通过命令行的修改不算即命令模式下的(以:开头的命令)。此外单纯的移动光标的动作motion不属于修改操作,所以也无法使用.命令重复其过程。举例删除文本# 执行一个删除操作df, # d表示删除操作符# f,表示在该行查找,# 用于删除从当前光标开始,

2022-03-01 22:10:35 1609

原创 Vim复制(剪切)粘贴操作

复制(剪切)粘贴使用y(yank)复制,d(delete)剪切,p(put)将内容粘贴到光标后,P粘贴到光标前。y操作符(operator)表示复制操作,后面接的动作(motion)表示y操作的范围。比如y2w,yi"等。“数字 + y” 可以实现多次执行同样的复制操作。“数字 + p” 可以实现多次粘贴。使用可视模式V或者v或者ctrl+v选中文本,在复制y或者剪切d,最后再粘贴p。在配置文件vimrc文件添加如下配置,可以实现Vim与系统剪切板共享内容:set clipboa

2022-03-01 22:07:38 3138

原创 Vim撤销与修改替换

快速撤销配合数字,多步撤销。u # 撤销,先按数字多步撤销,undoU # 撤销刚刚对当前行的操作ctrl+shift+r # 反撤销,redo快速修改r # replace,替换字符,先按数字可将多个字符全部替换为某个字符R # 进入替换模式,连续替换字符...

2022-03-01 22:02:11 527

原创 VIM高效删除

快速删除di和da结合其他字符或文本对象一起使用。比如结合单引号’,双引号",`,小括号(或),大括号{或},方括号[或],尖括号<或>,s操作句子,p操作段落,t操作html/xml的标签等。x # 删除光标所在字符,可先按数字向前删除多个字符,也可配合可视模式删除多个字符或多行X # 删除光标前一个字符,可先按数字向后删除多个字符,也可配合可视模式删除多行dw # 向前删除单词,包括用于分割单词的空格,先按数字向前删除多个单词db # 向后删除单词,

2022-03-01 21:58:56 6420

原创 Vim普通模式下快速移动大法

快速移动配合数字一起使用,重复执行从而移动多步。# 字符移动k # 上,可先按数字,多步移动j # 下h # 左l # 右# 单词/词组移动w/W # 下一个单词/词组开头,也可先按数字,多步移动e/E # 下一个单词/词组结尾b/B # 上一个单词/词组开头ge/gE # 上一个单词/词组结尾# 一个单词指以非空格符分割的单词(会把空格符也作为单词的一部分),通常包含a-zA-Z0-9,查看帮助:h word# 一个词组指一个包含除了空字符(空

2022-03-01 21:54:55 551

原创 VIM(Neovim)基本概念与高效使用方法

操作符和动作Vim两个基本概念:操作符operator和动作motion。operator看作动词,motion看做名词。操作符是用于对文本内容进行操作的命令,比如修改c、删除d、y复制到寄存器、~交换大小写、g~反转大小写、>增加(右)缩进、<减小(左)缩进、=自动缩进、zf定义折叠、gu转为小写、gU转为大写等。# 查看操作符:h operator动作是指移动光标的命令等。比如h、j、k、l、/、w、b、e、^、0、$、%、s等。用来限定范围。动作 = 移动光标的命令或动作

2022-03-01 21:51:22 3445

原创 出现频率最高的 k 个数字或前 K 个高频元素

题目LeetCode剑指 Offer思路使用HashMap存储数字到出现频率的映射。使用大小为K的最小堆存储HashMap中的映射关系,使用PriorityQueue实现最小堆。建堆的规则采用出现频率作为依据。最后将堆中的键值对数据中的键取出。代码import java.util.Comparator;import java.util.HashMap;import java.util.PriorityQueue;import java.util.Map;public class

2022-02-28 23:29:54 141

原创 Vim(Neovim)配置coc.nvim

操作系统:Ubuntu20.40。安装coc安装Node.js安装命令:curl -sL install-node.now.sh | bashnpm安装neovim和yarn:sudo npm i --registry https://registry.npm.taobao.org install -g neovim yarn配置淘宝镜像:npm config set registry https://registry.npm.taobao.orgvim-plug安装coc.nvim在V

2022-02-13 01:32:30 6757

原创 Java中不能被子类重写的父类结构举例(static、final、private、属性)

一、理论Java中使用static、final、private修饰的方法能被子类继承,但不会重写。此外,属性也能继承,但不能重写。属性和static修饰的方法。在子类中如果又定义了一份,那么从父类继承来的这些结构会被隐藏,存在2份。此时的属性包括普通属性、static修饰、final修饰、private修饰的。隐藏的结构采用静态绑定机制进行调用。在定义对象/变量时,等号左边的是编译类型,等号右边时运行类型。静态绑定机制:在编译期间就能确定调用子类还是父类的结构。等号左边的类型是父类就调用父类的结

2022-02-08 19:54:09 3631

原创 剑指 Offer II 048. 序列化与反序列化二叉树(前序遍历非递归、递归、层次遍历)

思路通常存储二叉树是采用链式的非线性方式存储,而此题需要用线性的存储方式。思维不同。首先确定遍历方式。将根节点作为第一个节点很方便,之后在遍历左子树和右子树,故可采取前序遍历和层次遍历。其次,线性的字符串存储,需要用分割符来划分不同的节点,可以采用逗号作为节点分隔符。然后,在链式存储中,由于左右子节点指针的存在,节点之间的关系可以通过指针指向来确定,树的结构也由此唯一确定,所以空节点一般不用考虑。而在线性存储结构中,没有指针确定节点之间的关系,所以需要考虑空节点,从而才能确定唯一的树结构。前序

2022-01-22 23:47:56 420

原创 剑指 Offer II 047. 二叉树剪枝(非递归和递归版本)

题目:二叉树剪枝思路分析首先先判断用前序、中序、后序、层次遍历中的哪一种。根据题目要求,当要将当前节点剪掉时,其左子树和右子树必须已经被剪掉,所以遍历顺序为左右根的后序遍历最合适。如果用其他遍历方式,根节点是在右子树之前被遍历,不好判断其右子树是否已经被剪掉了,自然也就不能确定当前节点是否需要被剪掉。非递归后序遍历代码(单栈)zhiyouclass Solution { public TreeNode pruneTree(TreeNode root){ if(root ==

2022-01-21 22:27:31 474

原创 Ubuntu安装oh my tmux(配置tmux和.tmux)

安装oh my tmux官方github地址: .tmux安装教程已上传到gitee:安装.tmux预准备安装终端复用器tmux二进制包安装源码编译安装注:源码安装过程如果如果缺少相应的依赖包,可先安装依赖软件,再编译安装tmuxgit clone https://github.com/tmux/tmux.gitcd tmuxbash autogen.sh./configure && makesudo make install安装oh my zsh

2021-12-29 22:23:27 2015

原创 Ubuntu终端配置oh-my-zsh(详细配置ohmyzsh步骤)

安装oh my zshoh my zsh的github地址:oh my zsh以Ubuntu 20.04为例。安装教程和文件已上传到gitee:安装oh my zsh预准备安装Zsh、curl、wget、git、vim。sudo apt install zsh curl wget git vim -y安装oh my zsh# 通过wget安装sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/maste

2021-12-29 22:13:34 18214 2

原创 Java自定义类创建对象数组并赋值

一、起因    采用下面的代码为对象数组里面的每个元素的字段赋值时报错。public class StudentArray { public static void main(String[] args){ Student[] stuArr = new Student[5]; //创建对象数组,没有显式初始化,stuArr存储地址 for(int i = 0; i < stuArr.length; ++i){

2021-12-22 16:54:51 7777 1

原创 Linux特殊权限SUID、SGID和SBIT管理

Linux,特殊权限。当一个文件设置了SUID后,某个用户执行这个文件时其实是以文件所有者(属主)的身份来运行。暂时切换身份。将目录设置sgid后,如果在该目录下创建文件或目录,新建的文件所在的组都将与该目录所属组保持一致。sgid表现在文件所属组的执行权限位,用小写s表示。

2021-12-08 22:42:50 854

原创 利用位运算求解数组中只出现一次的整数

题目:数组中的元素,只有一个数出现1次,其余的数都出现k次,找出只出现一次的元素。解题方法2.1 方法一:用数据结构hashMap,键值为数组的元素,实值为该元素出现的次数。import java.util.Arrays;import java.util.HashMap;import java.util.Map;@SuppressWarnings({"all"})public class 出现k次与出现1次 { public static void main(String[] a.

2021-08-25 17:21:11 91

原创 利用位运算交换一个整数的二进制数的奇偶位

一、解题思路先用32位的0101 0101 ... 0101 0101获取该整数的所有奇数位。再用32为的1010 1010 ... 1010 1010获取该整数的所有偶数位。将奇数位左移1位变成偶数位,偶数位右移1位变成奇数位;之后异或。二、代码public class 交换奇偶位 { public static void main(String[] args) { int num = 24; int res = changeBit(num);

2021-08-25 17:01:54 194

原创 利用位运算求解一个整数的二进制表示中1的个数

题目:求解一个整数的二进制表示中1的个数。比如6的二级制为110,则结果为2。解题方法:2.1 方法一:用1与整数的每一位做与运算,如果该位与1的结果为1则表示该位为1。方法一代码import java.util.Scanner;public class 二进制中1的个数 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc..

2021-08-25 16:50:07 196

深入理解C++11代码

C++11的代码,希望对大家有帮助,有错无的地方希望指正.

2019-01-30

编码:隐匿在计算机软硬件背后的语言

对了解计算机的工作原理有帮助,对后面学习<<计算机组成原理>>有一定的帮助。

2019-01-30

空空如也

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

TA关注的人

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