自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode450.删除二叉搜索树中的节点

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。3 左右节点都不为空(*)我自己的代码就是在这个地方变得又臭又长的,学习了大佬的方法,真没想到啊。2 左右节点有一个为空一个不为空,就让不为空的做目标节点父节点的子树。3.1 将目标节点的左子树移到目标节点中序遍历后继节点的左子树上。3.2 将目标节点的右子树移到目标节点中序遍历前驱节点的右子树上。我这里用的是3.1的方法。

2023-11-09 21:16:20 64

原创 LeetCode106. 从中序与后序遍历序列构造二叉树

看我上面画的屎图,整棵树的根节点由后序的特性一定是在最后一个,也就是3,然后去中序数组可以确定3在哪,也就确定了整棵树的左子树和右子树有哪些节点,然后根据中序左子树和右子树的长度去确定后序数组中,左子树和右子树的后序遍历是哪些,然后去递归就行。给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。轻喷,这种还是手写方便。

2023-11-07 19:10:24 65

原创 LeetCode222.完全二叉树的节点个数

这里的方法就是让左右两个指针分别向左和右下去,直到它们的left(右指针为right)为空,也就是分别统计左右子树的高度(因为是完全二叉树,可以这么求高度的),如果左右高度相同,那就用满二叉树的特性就可以求出当前树的节点个数;完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。我自己的解题时复是O(n),题目的进阶写法是设计出来一个时复小于n的,我没想出来。

2023-11-06 18:43:56 65

原创 LeetCode111.104二叉树的最大最小深度

其实这道题使用层序遍历来统计最小深度是最合适的,因为递归总是需要遍历完所有节点才结束的,层序遍历会比递归快一半左右。这里用的递归的方法,分别计算根节点左右子树的最大深度,大的那一方+1就是此二叉树的最大深度。这里我是用的递归方法来找到所有的叶子节点,然后用当前深度和最小深度做对比。深度(叶子节点到根节点长度),最大最小深度这里不多赘述。

2023-11-05 19:08:11 55

原创 LeetCode101.对称二叉树

从下面的代码开始说起,递归到最后一个节点(也是第一个执行递归主代码的节点)一定是图中标出的①的值为5的节点,左侧5的左节点和右侧5的右节点都是空,返回true,继而判断左侧5的右节点和右侧5的左节点,也都是true,所以左右5节点返回true;一直递归值根节点1。队列实现的迭代法是一层层地去判断是否对称的,我这里的顺序是左侧的左节点和右侧的右节点进行对称判断然后再判断左侧的右节点和右侧的左节点。由于我的方法跑出来的结果不太好,所以找了大佬们的方法来看,发现递归方法是最优方法,迭代法倒不是那么高效。

2023-11-05 14:24:24 29

原创 LeetCode102.二叉树的层序遍历

上面的代码是以前记住的一种写法,实现起来略显繁复,需要统计当前层的数量和下一层的数量,写的时候都不大好搞。给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)换一种写法,代码好写一点。

2023-11-03 08:00:51 26

原创 LeetCode347.前K个高频元素

PriorityQueue()这个类是优先级队列也就是堆的实现类,基本方法和队列很像,poll(),peek(),offer(),isEmpty(),size()等。你被骗了,我没做出来,能想到的方法时间复杂度是nlogn,还不如不写,想到小顶堆了,但是Java这里我不知道怎么实现:(你可以按 任意顺序 返回答案。经典使用堆实现,但是个人的Java基础不太好,不会实现堆,是能去找博文看看了,顺便看了下大佬的实现,我是废物。至于小顶堆查找一个集合中的top k元素,就不多赘述了,大家都会。

2023-11-02 19:44:00 68 1

原创 LeetCode239.滑动窗口最大值

整体运行:滑动窗口移动的时候,窗口不再包含的那个元素从队列中出队(如果这个元素在队首的话,毕竟单调队列维护队首的元素就代表当前滑动窗口的最大值,如果滑动窗口要掠过它,它理应被遗弃;看了大佬的方法,用的是单调队列(说实话,第一次听过),思路就是当前的单调队列中的元素从队头到队尾是单调不递增的(后面搜了资料发现单调队列分成单调递增和单调递减两种),所以队头的元素代表的当前滑动窗口中的最大值。上面的代码就是学到的,这个题没做出来,我写的方法时复已经到了O(n*k)了,虽然不是暴力算法,时复到了它就是暴力了。

2023-11-01 08:20:02 22

原创 LeetCode150.逆波兰表达式求值

其实没什么思想,数据结构里面的例题,遇到数字就入栈,遇到运算符就将栈中的两个数字出栈并进行相应的运算,运算的结果重新返回栈中,但是在运算-和/运算的时候,要注意栈的特性,第一个出栈的数字是运算的后位数。给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。返回一个表示表达式值的整数。

2023-10-31 19:43:09 41 1

原创 LeetCode1047.删除字符串中的所有相邻重复项

和删除想匹配的括号那题一样的思路,读取到当前字符时,“迫切”需要另一个相同的字符来消融,如果下一个字符相等,则消融;否则,当前栈顶元素的“迫切感”降一级,将下一个字符入栈,周而复始。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。

2023-10-31 19:42:08 45 1

原创 LeetCode1047.删除字符串中的所有相邻重复项

和删除想匹配的括号那题一样的思路,读取到当前字符时,“迫切”需要另一个相同的字符来消融,如果下一个字符相等,则消融;否则,当前栈顶元素的“迫切感”降一级,将下一个字符入栈,周而复始。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。

2023-10-31 19:01:55 37 1

原创 LeetCode20.有效的括号

用栈的思想来解决此问题,当遇到第一个左括号的时候,左括号入栈并且“迫切”一个右括号来消融它,如果下一个正好是相应的右括号,那么左括号出栈;若下一个元素是另一个左括号,那么前一个左括号“迫切”找到另一个右括号消融就需要降优先级,当前左括号入栈;如果右括号多了一个,会出现消融左括号的时候,发现栈中并没有相应的左括号并且栈为空,此时返回false;给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。每个右括号都有一个对应的相同类型的左括号。

2023-10-31 08:13:13 34 1

原创 LeetCode225.用队列实现栈

实现的思想就是主队列来模拟栈(倒着的),当offer元素时,先将主队列的元素出队依次添加到辅助队列的末尾,保持次序不变,然后将新添加的元素添加到主队列的尾部(此时队列为空,也是头部),然后再将辅助队列依次出队并加入主队列的后面。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现的思想和上一篇实现栈的思想类似。boolean empty() 如果栈是空的,返回 true;int pop() 移除并返回栈顶元素。

2023-10-30 21:56:51 25

原创 LeetCode232.用栈实现队列

实现方法比较简单,push操作全部放入inStack,如果是pop的话,先判断outStack是否为空,如果为空则将InStack内的元素倒灌入outStack中,然后pop出outStack栈顶元素;如果outStack不为空,就不能再倒灌inStack进outStack中了,会破坏outStack的结构,先优先pop出outStack中的内容。void push(int x) 将元素 x 推到队列的末尾。int pop() 从队列的开头移除并返回元素。int peek() 返回队列开头的元素。

2023-10-30 19:29:05 23

原创 LeetCode459.重复的子字符串

KMP算法中的next数组索引位的值就代表当前相等的前后缀的长度,而当前题目的特性是字符串是由子字符串重复构成,那么最长的前后缀一定也是由子字符串构成的,所以最长前后缀的差集一定是子字符串,证明如下。因为最长前后缀是相等的,所以 p[0]=s[0],p[1]=s[1],p[2]=s[2],而s[0]=f[3],s[1]=f[4],s[2]=f[5];所以可以证得f[0]=f[3],f[1]=f[4],f[2]=f[5],重复循环下去就可以证得字符串是由子字符串重复构成。

2023-10-29 22:48:05 70 1

原创 LeetCode151.反转字符串中的单词

题目要求去除string的首尾空格,因此需要两个指针start end来记录去除首尾空格之后的内容的起始和结束index,right和left两个指针的初始index为end+1和end,然后left去找遇到的第一个空格,然后用substring()方法截取单词加入到StringBuilder对象中,StringBuilder对象再添加一个空格,然后left需要去去除单词间的多余的空格,找到单词间若干空格的第一个空格,赋值给right,然后left再去找下一个空格,然后截取字符串。

2023-10-26 22:40:00 33

原创 LeetCode541.反转字符串

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。思路很简单,每次处理2K个单位,处理前k个字符串,是否需要处理最后剩余的字串就根据i+k是否越界来判断。// 判断尾数够不够k个来取决end指针的位置。

2023-10-26 08:34:20 34

原创 LeetCode977. 有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

2023-10-24 15:49:01 28 1

原创 Nginx配置错误:connect() failed (10061: No connection could be made because the target machine actively

前端页面通过Nginx托管,运行在windows上,OpenResty集群运行在虚拟机上(Centos),本地的Nginx仅仅起到动静分离和反向代理的作用,真正处理缓存的都会发送请求到OpenResty集群来处理。今天本打算学一下Nginx反向代理发送请求到OpenResty(其实也就是个Nginx,可以把它理解成Anaconda中的python版本),再通过OpenResty使用Lua脚本向Redis或数据库查找缓存来着,在配环境的时候报了个502错误。

2023-10-24 10:02:35 1816 1

原创 LeetCode 454.四数相加 II

四数相加退化成两数之和

2023-10-23 22:08:39 30 1

原创 LeetCode 1.两数之和

虽然这个并没有什么用,但还是去看了下大神的写法,发现想法都是一样的,但是我是事先把数组内的所有元素都放入map中了,所以虽然时间复杂度都是O(n),但我的是O(2n),而且在编码过程中还要考虑到下图的情况。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。

2023-10-23 20:22:13 24

原创 Canal实现缓存同步策略

个人在学习Redis的过程中,遇到多级缓存的处理方法,我本人的多级缓存分类里面提到过个人学习中的项目构成。简单来说就是OpenResty集群负责缓存一些静态性比较强的数据,比如说这个网页上的分类信息等基本不变化的数据,而Redis和JVM进程缓存(使用Caffeine实现)负责缓存变化性比较大的数据资源。

2023-10-20 10:59:28 49 1

原创 LeetCode27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。自己的代码都是以前考研的时候记着的,并不知道它具体的分类或者名字是啥。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。看了别人的讲解才知道自己的方法本质就是快慢指针。以下为笔记,所记录的两种都是双指针法。

2023-10-19 15:10:46 30

原创 LeetCode704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

2023-10-18 23:04:17 24

原创 LeetCode54. 螺旋矩阵Ⅰ

LeetCode54. 螺旋矩阵Ⅰ

2023-10-18 22:54:36 30 1

原创 Python文件操作学习内容

这是本人近期学习Python过程中产生的一些问题

2022-09-15 22:15:41 303 1

空空如也

空空如也

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

TA关注的人

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