自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营day14|二叉树

以上是以后序遍历为例子,我在一开始思考迭代遍历时已经在往统一迭代的方向靠,因此在看了carl视频后结合自己的思考第一次写出的就是统一迭代代码。迭代遍历就是不利用递归用循环结构来实现对二叉树的遍历。有一定的基础了,因此只给出前序遍历的代码。

2023-04-24 15:42:59 93

原创 代码随想录算法训练营day13|栈和队列

347.前 K 个高频元素。239. 滑动窗口最大值。

2023-04-23 23:00:33 108

原创 代码随想录算法训练营day11|栈和队列part02

20. 有效的括号 本题的要求将相同种类的左括号与右括号进行匹配。 右括号必须与最近的左括号进行匹配,这样的匹配方式符合栈的后进先出结构,因此用栈结构进行解题。 class Solution { public boolean isValid(String s) { Deque<Character> stack=new ArrayDeque<Character>(); for(int i=0;i<s.length();i+

2023-04-23 11:57:34 116

原创 代码随想录算法训练营day10|栈和队列part01

说实话,leetcode上要求的是两个队列实现后入先出的栈,队列是先进先出,弹出的是栈底元素放到另外一个队列的队尾,必须得把前面n-1个元素弹到另外一个队列中才能弹出栈顶元素。队列的特性是新元素放到尾部,根本就不需要两个队列这么多,直接队头元素全部弹出陆续再推进队列的尾部,栈顶元素自然就被推到了队头,此时队头自然就是栈顶了。一个栈接受元素后,此时从栈顶出来的是队列的尾元素,因此再用一个栈来装从栈顶弹出的队列尾部元素,此时栈底存着队尾,栈顶存着队头,实现了队列。

2023-04-17 14:31:55 102

原创 代码随想录算法训练营09|kmp算法

我的第一想法是,如果这个字符串由某个字符串重复多次构成,那么从第二个字串开头开始next数组随着下标增1也跟着增1,因此我的最初判断条件是在完成next数组的构造后,直接进行next数组遍历,从遇到的第一个1开始如果next[i]==next[i-1]+1一直满足到遍历结束则返回正确。对于这个疑问,在b站看到。这个方法失败后,我又陷入了思考,现在我能确定是,如果这个字符串真的是重复子串构成,那么这个重复次数至少是2,那么next数组的最大next[j]一定是在末尾而且是大于len/2。

2023-04-17 13:47:43 117

原创 代码随想录day08字符串部分|● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符串

本题的要求是每2k个字符将前k个进行反转。首先确定反转的方法使用的是双指针后,然后得看如何对这个数组进行遍历来达到题目中的反转要求。为了后面的反转的时间复杂度小一点点,可以选择先进行移除多余空格的操作,这里移除空格的操作利用快慢指针进行,慢指针进行单词的录入,快指针进行原字符串的遍历。本题的要求一是单词的顺序要进行反转,而单词内的字母不进行反转,二是反转后的单词序列中单词与单词之间只有一个空格。反转单词的操作,可以同个整体的翻转后先将单词置于正确的位置后,再逐个单词反转将各单词内的字母序列还原。

2023-04-17 13:05:03 25

原创 代码随想录算法训练营day7|

在本题中,我们可以先将数组排序,先固定一个加数(当然应该先选择最左边),那么这个时候,问题就转化成了找出两个数组元素的和为固定加数和目标值的差。双指针在这个时候就派上了用场,由于我们做了排序处理,当我们将指针放置于一头一尾时,这时候两数组元素和只会出现相等大于或者小于情况,小于目标值时,头指针往右移(递增数组) ,反之则·····。思来想去,要判断和是否为目标值,也可以理解为找出两个不同数组元素的和恰好为目标值和另外两个不同数组元素的差值,转换到了哈希问题:判断差值是否出现在前两个数组元素和的集合中。

2023-04-12 00:13:37 112

原创 代码随想录算法训练营day4|24. 两两交换链表中的节点19. 删除链表的倒数第 N 个结点 面试题 02.07. 链表相交 142. 环形链表 II

要确认是否有环存在,可以使用快慢指针,快指针一定比慢指针先进入环,等到慢指针也进入环中时,此时便是追及问题,为了保证在追赶慢指针的时候避免出现刚好错开的情况,两指针的速度差应该为1。在确认有环后,再次启动快慢指针,第二次相遇时慢指针走2len,快指针走2len,得出环的长度。得出环的长度后,快慢指针回到起点且速度一致为1,这个时候快指针先出发走len长度,这时候慢指针启动,两指针同时移动,由于指针相隔len,因此必定会在环的起点(同时也是终点相遇,此时便可得出入口的下标)然后再是判断入口的位置。

2023-04-08 23:00:30 72 1

原创 代码随想录算法训练营day3|203.移除链表元素 707.设计链表 206.反转链表

直接进行反转的模拟,注意在进行指针的反转时,喜欢先把原指向的下一结点进行备份,再进行翻转。图解中清晰看出,随着reverse指针移动到5后面的空指针,此时newhead恰好正是反转链表的头节点。移除链表元素为基础题,需要注意的就是ptr移动指针最后需要停在被移除指针前一结点,java中没有引用的地址会被垃圾处理机收集,不需要释放被移除指针的空间。基础题,考研对链表原理的掌握以及模拟链表的各种操作。

2023-04-07 23:09:21 129 1

原创 代码随想录算法训练营|977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

更优的解法为滑动窗口方法(本质上是双指针),sum与target的实时关系是窗口扩大和缩小的条件,并且保证扩大窗口时只能移动有边界,缩小窗口只能移动左边界,这样避免了暴力方法中很多无效的匹配,最终达到n的时间复杂度。首先,可以用暴力方法进行全部子数组的匹配,这个时候的时间复杂度为n方。本题是一道连续子数组的问题,与字符串中字串问题较为相似。

2023-04-06 20:21:39 335 1

原创 代码随想录算法训练营|704.二分查找、27.移除元素

细心看我的代码会发现,我对于middle的处理做了一个跟前两种方法截然不同的操作,前两种方法中middle=(left+right)/2,而在左开右闭这里我对双指针下标相加后还进行了一个+1的操作,原因在于系统本身除法的运算规则是向下取整,在个人的debug过程中就发现遵循原有的运算规则情况下,当查找的值在(i,i+1]区间时,middle的值会一直被赋予为i,因此按照第一个if语句判断后会无限循环卡在这个区间,因此我们需要改变原有的运算规则进行向上取整,进行+1的操作。

2023-04-05 11:32:39 77

空空如也

空空如也

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

TA关注的人

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