自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第十五天|层序遍历 226.翻转二叉树 (优先掌握递归) 101. 对称二叉树 (优先掌握递归)

因为是先前序遍历,所以先进行交换左右孩子节点,然后反转左子树,反转右子树。

2023-08-09 22:19:35 683

原创 代码随想录算法训练营第十四天|二叉树:递归遍历 迭代遍历统一迭代

【代码】代码随想录算法训练营第十四天|二叉树:递归遍历 迭代遍历统一迭代。

2023-08-09 14:42:46 684

原创 代码随想录算法训练营第十三天| 239. 滑动窗口最大值 347.前 K 个高频元素

构建小顶堆,将所有频率将入到堆中,如果堆的大小大于K了,就将元素从堆顶弹出,留下的就是答案。如果输入的值大于front,说明此时的数是最大值,把原来第一个pop;首先定义队列,定义三个函数:输出上一个,输入下一个,输出最大值。如果要输出的值等于front,说明是最大值,输出。时间要求严格,不可以使用暴力算法。使用队列的时间复杂度为O(n)定义result存放最大值。初始化队列,输入前k个值。先把数组中用map存起来。239.滑动窗口最大值。347.前K个高频元素。return 最大值。

2023-08-07 11:30:59 826 1

原创 代码随想录算法训练营第十一天|20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

利用栈的性质,如果长度是奇数则不成立。遍历一遍s,如果遇到三种左括号,在栈中存放对应的右括号。当栈顶的元素和右括号不同时,输出false。最后栈是空的话说明符合题意。这道题很像消消乐,把S的值遍历一遍,如果和栈的顶部元素不同就把s放进栈里,相同就把栈的元素放出去,然后把栈里的元素放到result中,最后得到相反的字符串,然后反转就行。当遇到加减乘除时把前两个数字做对应的运算,不是的话把对应的值放到栈里。1047.删除字符串中所有相邻的重复项。最后把栈里的元素清空,释放内存。150.逆波兰表达式求值。

2023-08-05 13:04:16 950 1

原创 代码随想录算法训练营第十天| 232.用栈实现队列 225. 用队列实现栈

实现栈只需要一个队列就行,把队列的前n-1个值pop然后再push就能把最后一个放在第一位。peek()的实现,直接复用了pop(),然后再把pop的值push即可。把开始输入的栈的顶部的元素输入到输出的栈,再把输出的栈的元素全部输出。当输出的栈是空的时候才能输入,否则栈的顺序会改变。232.用栈实现队列。225.用队列实现栈。然后一个一个输出就行。

2023-08-04 10:46:35 1014 1

原创 代码随想录算法训练营第九天|459.重复的子字符串 .28. 实现 strStr()

所以定义新的字符串等于两个相加,由于要判断中间有没有重复,如果不删去头和尾,则搜出来还是原来的字符串,删去后判断即可。当一个字符串是重复的字符串构成时,那么两个同样的字符串拼在一起也是重复的,28.实现strStr()459.重复的子字符串。

2023-08-03 13:52:01 975

原创 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

若使用erase时间复杂度会变成O(n^2),使用双指针法来去移除空格,最后resize(重新设置)一下字符串的大小,就可以做到O(n)的时间复杂度.在插入时对于数组要从后往前插,从前向后填充就是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素向后移动。这样操作不用申请新的数组,还避免了每次插入所有数组向后移动的问题。先反转前n个,再反转后s.size() - n 个,最后反转整体。快指针删除所有的空格,慢指针补上单词,如果遇到空格说明单词补完。151.反转字符串的单词。

2023-08-02 14:44:43 1192

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

四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况,三数之和的时间复杂度是O(n^2),四数之和的时间复杂度是O(n^3)。这里用双指针法,首先将数组排序,然后有一层for循环,i从下标0的地方开始,同时定一个下标left 定义在i+1的位置上,定义下标right 在数组结尾的位置上。最后 left++;

2023-08-01 15:03:14 1270 1

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

遇到要查找元素的问题用哈希表解决,这道题元素少,可以用数组解决,用第i个元素剪去a对应的ASCII码就能把元素转化,之后++是因为当第二个数组元素查找后再减去,如果相同那么得到0不同就不是0。在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。

2023-07-31 15:56:29 1423 1

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

利用双指针,快指针先遍历N个节点,然后和慢指针一起遍历到最后,这时候慢指针对应的节点就是倒数第N个节点,但是删除节点需要用的是前一个节点,所以让快指针遍历N+1个节点,慢指针就会少遍历一次,就得到了第N个节点前一个节点。采用双指针法,定义快慢指针,快指针每次移动两个节点,慢指针每次移动一个节点,可以看作慢指针不动,快指针每次移动一个节点,也就不存在跳过慢指针的情况。先设置虚拟头节点,还要注意设置两个临时的指针,否则cur指向改变后原来的链表就找不到了。3⃣️让原来的Head指向tmp1的节点。

2023-07-29 18:11:33 1615

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

遍历到第Index的前一个后 ,让cur -> next = cur ->next ->next即可 ,然后释放cur ->next。然后创建指针cur遍历,当cur指向的节点的值是val,让cur ->next 指向 cur ->next的 ->next即可。在链表增加一个虚拟的头节点,真正的头节点为 head = dummHead -> next。先定义tmp保存下一个节点,然后翻转,再让cur和pre的值互换,最后更新新的cur节点。先遍历到最后一个,然后cur -> next = newNode;

2023-07-28 17:47:06 1794

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

第一层for循环便利一遍,当前j个元素之和大于等于target时,获得此时子数组的长度len,并且sum减去第i个元素的值,然后i++,这样就调整了窗口的大小,最终找到最小的子数组。先创建二维数组,定义初始的x,y为0,循环的次数为n的一半,中值mid是当n为奇数时中间值要单独加进去,用count计数,offset是每次循环减去的边界值,初始为1。所给数组为有序数组,可以用双指针,但要考虑负数平方后的大小。其实和双指针一样,用j来遍历数组,用i来改变窗口的大小。209.长度最小的子数组。

2023-07-27 15:08:29 1965 1

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

当fast不是对应要删去的元素时slow生成对应新数组的元素,当fast是对应要删去的元素时slow不动,等下一次fast对应不是要删去的元素时被slow覆盖。用[1,1]做例子可知left可以等于right,但是比较时不能用等于,会重复上次循环的数据,并且left,right必须+1。用[1,1)做例子可知left不能等于right,所以left需要+1而right不需要。二分查找类似于查字典,每次找一半。需要注意的是二分时区间的选取。大多数情况选用左闭右闭和左闭右开两种方式。

2023-07-26 13:12:00 2065 1

空空如也

空空如也

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

TA关注的人

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