代码随想录-算法训练营
文章平均质量分 95
5.14-7.19,记录算法学习过程
Coding_Doggy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
代码随想录算法训练营第十三天 | 二叉树理论、递归遍历、迭代遍历、层序遍历
刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。int val;大家会发现二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。在现场面试的时候 面试官可能要求手写代码,所以数据结构的定义以及简单逻辑的代码一定要锻炼白纸写出来。int val;原创 2025-07-11 23:29:04 · 992 阅读 · 0 评论 -
代码随想录算法训练营第十一天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素、栈与队列总结
代码随想录。原创 2025-06-02 12:14:24 · 710 阅读 · 0 评论 -
代码随想录算法训练营第十天 | 栈与队列理论基础、232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项
所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。从下图中可以看出,栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。所以return false。原创 2025-05-25 23:34:17 · 972 阅读 · 0 评论 -
代码随想录算法训练营第九天 | 151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串
不过这种解法还有一个问题,就是 我们最终还是要判断 一个字符串(s + s)是否出现过 s 的过程,大家可能直接用contains,find 之类的库函数, 却忽略了实现这些函数的时间复杂度(暴力解法是m * n,一般库函数实现为 O(m + n))。而且遍历的时候 都不用遍历结束,只需要遍历到中间位置,因为子串结束位置大于中间位置的话,一定不能重复组成字符串。暴力的解法, 就是一个for循环获取 子串的终止位置, 然后判断子串是否能重复构成字符串,又嵌套一个for循环,所以是O(n^2)的时间复杂度。原创 2025-05-24 23:30:45 · 976 阅读 · 0 评论 -
代码随想录算法训练营第八天 | 344.反转字符串、541. 反转字符串II、替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。一些同学可能为了处理逻辑:每隔2k个字符的前k的字符,写了一堆逻辑代码或者再搞一个计数器,来统计2k,再统计前k个字符。原创 2025-05-23 23:05:34 · 709 阅读 · 0 评论 -
代码随想录算法训练营第七天 | 454.四数相加II、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)。满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]说到去重,其实主要考虑三个数的去重。原创 2025-05-20 15:33:41 · 806 阅读 · 0 评论 -
代码随想录算法训练营第六天 | 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、1. 两数之和、 202. 快乐数
总结一下,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!原创 2025-05-19 15:27:23 · 621 阅读 · 0 评论 -
代码随想录算法训练营第四天| 24. 两两交换链表中的节点、面试题 02.07. 链表相交、19.删除链表的倒数第N个节点、142.环形链表II
可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。其实这种情况和n为1的时候 效果是一样的,一样可以通过这个方法找到 环形的入口节点,只不过,index1 指针在环里 多转了(n-1)圈,然后再遇到index2,相遇点依然是环形的入口节点。由于快指针一次走两个节点,慢指针一次走一个节点,所以两者的相对速度为1,只要有环,两者一定会在环中相遇。原创 2025-05-18 18:57:39 · 1081 阅读 · 0 评论 -
代码随想录算法训练营第三天| 链表基础、203.移除链表元素、707.设计链表、206.反转链表
接下来说一说链表的定义。链表节点的定义,很多同学在面试的时候都写不好。这是因为平时在刷leetcode的时候,链表的节点都默认定义好了,直接用就行了,所以同学们都没有注意到链表的节点是如何定义的。而在面试的时候,一旦要自己手写链表,就写的错漏百出。// 结点的值int val;// 下一个结点// 节点的构造函数(无参)// 节点的构造函数(有一个参数)// 节点的构造函数(有两个参数)原创 2025-05-17 11:44:07 · 563 阅读 · 0 评论 -
代码随想录算法训练营第二天| 209.长度最小的子数组、59.螺旋矩阵II、58. 区间和、44. 开发商购买土地
不要以为for里放一个while就以为是O(n^2)啊, 主要是看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。就是前缀和的思路,先统计好,前n行的和 q[n],如果要求矩阵 a行 到 b行 之间的总和,那么就 q[b] - q[a - 1]就好。本题也可以使用 前缀和的思路来求解,先将 行方向,和 列方向的和求出来,这样可以方便知道 划分的两个区间的和。例如,我们要统计 vec[i] 这个数组上的区间和。原创 2025-05-17 11:21:20 · 963 阅读 · 0 评论 -
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素、917.有序数组的平方
704. 二分查找、27. 移除元素、917.有序数组的平方 巩固双指针、快慢指针、二分查找代码细节原创 2025-05-14 19:59:50 · 960 阅读 · 0 评论
分享