自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录第14天 二叉树Part01 递归遍历 迭代遍历

中序遍历和前序遍历不同,因为前序遍历的根左右,每次遍历到根后,直接将根的值放进结果数组了,但是对于中序遍历,需要一直找到最左的孩子,然后才开始往结果数组里面填数。那么在栈内可以放每次遍历的左孩子,并由cur指针指向这个左孩子,当cur为空的时候,没有左孩子了,那么就可以开始往结果数组里面填数了,填的就是让栈里面弹出一个元素的值,此时的cur指向这个元素,然后让cur去遍历它的右子树。每次递归的时候递归的使用这个递归方法,让root结点的左右孩子作为下一个root结点进行遍历,直到root的孩子为空就返回。

2024-05-21 19:44:45 656

原创 代码随想录 第11天 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

这是注意到数字的前后顺序对运算的结果有影响的是减法和除法,所以弹出的第一个数字是运算中的后面的数字,所以用num2代表弹出的第一个元素。这道题也是用栈的思想来做,栈首的字母和字符串中的字母不重复就放进栈里,重复的就不放,顺便将栈首元素弹出。注意讨论一下栈是否为空的条件,因为当栈为空的时候,没办法取到栈首的元素。3.“((({})”遍历结束后,发现栈不为空,说明左括号过多,无法匹配,这个放到循环外面进行即可。最后将栈内的元素转化为字符串的时候,注意栈是先进后出,所以将后出来的元素放到前面,顺序才正确。

2024-05-18 13:52:45 521

原创 代码随想录:第十天 232.用栈实现队列225用队列实现栈

用队列实现栈可以借助两个单向队列,有一个简便的方法,借助双向队列,将栈里面的数据先放进队列里,然后在队列里面的元素,由于想弹出的元素在队列的最里面,此时将最里面元素之前的元素都弹出,再放到该队列的末尾即可。用栈实现队列的输出需要借助两个栈,先将队列的数据放进栈1,然后将栈1中的数据放进栈2中,只要栈2里面的数据非空,就将栈1里面的元素往里面放。

2024-05-17 22:30:41 390

原创 代码随想录算法训练营第八天| 344.反转字符串, 541. 反转字符串II,151.翻转字符串里的单词

今天脑子垮了,明天补上这道题。

2024-05-15 21:09:44 211 1

原创 代码随想录算法训练营第七天| 454.四数相加II,383. 赎金信,15. 三数之和 18. 四数之和

对于b和c的去重,是在找到一个解的情况下进行的,因为[-1,-1,-1,0,1,1,1]这个时候,找到一个解[-1,1]就可以让left和right一直移动了,直到找到不重复的数。这个条件不是写在while循环里面,因为[-2,0,1,1,2],对于这个数组,[[-2,0,2],[-2,1,1]],后者的写法只返回第一个而缺失了[-2,1,1]这个数组。时间复杂度O(n2)时间复杂度O(n3)两种方法,一种是用数组记录,用时比Map的时间短,时间复杂度都为O(n)。时间复杂度O(n2)

2024-05-14 21:11:06 615

原创 代码随想录算法训练营第六天|242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

无限循环,始终变不到1,这句话表明如果n的值不为1,最后出现循环了,那么就代表不属于快乐数,判断n是否重复出现并且不是1,就和哈希表的使用条件对应了,用set来存放每一次的更新的n值即可。题目中限定了数组中的元素大小为1~1000之间,所以也可以考虑使用数组来存放,这里不存放重复值的写法是将数组的对应的数值恒定的设置为1,对于nums1,如果当前的元素在数组中的值为1,那么就放进set集合中。同时要返回下标,考虑使用HashMap,这里注意,Key是存放的num,而Value存放的是下标。

2024-05-13 21:07:30 736 1

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

如何找到倒数第n个结点的值是关键,双指针思想,让快指针先移动n+1个位置(注意不是n),这时候再同时移动两个指针,慢指针就来到了第n个结点的前一个结点位置,然后删除即可。(涉及到链表的插入和删除都要使用虚拟头结点!首先需要找到开始比较的位置,由于两个链表长度不一样,所以让长的链表先移动两个链表长度的差值,然后两个链表长度相等了再一起移动进行判断。再进行长度比较时需要记录两个链表长度的差值,并根据此移动较长的链表,所以可以选链表A为最长的链表,如果链表B比A长,就让A和B交换,始终保持链表A是最长的。

2024-05-11 20:55:58 395 2

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

递归算法就是找相似,总是让后一个指针指向前一个指针,不断更新传入的参数,就是将pre和cur向后移动一位,到最后传入的反转的位置为null时,即到达了最后,返回pre头结点。循环的条件是到了最后cur的值为null。增删结点的核心在于找到目标位置的前一个位置,因为插入和删除都需要前一个结点操作,所以for循环中找的是目标位置的前一个位置。当cur.next存放的是目标值时,不用更新cur 的值,因为此时cur.next是新的值,还没有进行判断。注意链表的下标和数组一样,都是从0开始的。

2024-05-10 22:43:01 311 1

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

力扣数组章节

2024-05-09 11:19:48 841 1

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

移动的过程中最后一个元素注意不要超出索引位置,移动完成之后由于最后一个位置放的仍然是原数组的最后一个元素,所以数组的大小要减去1,同时注意由于i位置后的元素都移动了,所以i位置要重新判断,所以i-1,然后等待下次循环的时候再次遍历i位置。循环的时候注意有两种写法,一种是左闭右闭区间,另外一种是左闭右开区间。注意mid的值要放在循环里面,每一次都需要重新计算。一个指针用放数组元素,另一个指针用来找不重复的元素。一层循环遍历数组,一层循环把后面的元素往前移动。注意原题给的是有序数组。

2024-05-08 12:27:21 393

原创 力扣203:长度最小的子数组

滑动窗口解决,只用遍历一次right,left的值在找到大于等于target的位置用变量minlen。此时要让minlen的值为一个无穷大的数。先记住长度,直接让left+1,然后遇到大于等于target的位置继续让right移动。找到的长度如果小就替换。

2024-05-02 19:34:22 96

原创 力扣刷题997:有序数组的平方之双指针

快慢指针

2024-05-02 18:30:56 220 2

空空如也

空空如也

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

TA关注的人

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