- 博客(13)
- 收藏
- 关注
原创 代码随想录算法训练营第十三天 | 二叉树理论基础、递归遍历、迭代遍历、统一迭代
顺序存储就是用数组来存。int val;二叉树的定义和链表是差不多的,只是二叉树的节点里有两个指针,分别指向左右孩子。
2024-01-04 12:49:23 930 1
原创 代码随想录算法训练营第十二天 | 239. 滑动窗口最大值、347.前 K 个高频元素
今天的两个题都是用于维护k个有序队列,一个是用于维护潜在满足题意的部分元素的单调队列,一个是用于维护队列完全有序的优先队列。栈是容器适配器,底层容器使用不同的容器,导致栈内数据在内存中不一定是连续分布的。用栈实现队列需要建立两个栈,用队列实现栈就用一个队列就能实现操作系统中的目录也是用到了栈的数据结构,递归也是用到的栈,因此递归都能用栈实现。
2023-11-16 11:52:33 69 1
原创 代码随想录算法训练营第十一天 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
栈适用于查找匹配和匹配消除的题,递归问题基本也都能用栈解决。在企业项目开发中,尽量不要使用递归,在项目比较大的时候,由于参数多,全局变量等等,使用递归很容易判断不充分return的条件,非常容易无限递归(或者递归层级过深),造成栈溢出错误。
2023-11-16 08:55:24 59 1
原创 代码随想录算法训练营第十天 | 232. 用栈实现队列、225. 用队列实现栈
今天的两个题都是简单的概念题,理解好栈和队列的定义就能很容易写出代码。注意要活用复用代码,很多时候会事半功倍。
2023-11-15 22:14:51 75 1
原创 代码随想录算法训练营第九天 | 28. 实现 strStr()、459. 重复的子字符串、字符串总结、双指针复习
在C语言中,把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志vector< char > 和 string 有什么区别:在基本操作上没有区别,但是string提供更多的字符串处理的相关接口,例如string 重载了+,而vector却没有。主要解题思路:双指针、先局部翻转再整体翻转、KMP。
2023-11-14 23:35:58 50
原创 代码随想录算法训练营第八天 | 344. 反转字符串、541. 反转字符串II、剑指Offer 05. 替换空格、151. 翻转字符串里的单词、剑指Offer58-II. 左旋转字符串
本期题目中主要难点就在于151题,需要有局部翻转+全局反转的思路。此外解决删除多余空格的问题也需要多加考虑,如何用简单的代码实现繁琐的操作,需要多做几次加深记忆。
2023-11-08 16:21:29 54 1
原创 代码随想录算法训练营第七天 | 454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和
在做过的加和题中,三数之和和四数之和都用到的双指针算法,因为他们都要求输出所有符合题意的数据、不允许使用重复、答案可能存在很多种、且都在一个数列中寻找。而二数之和虽然也在一个数组中寻找,但答案只有一种,因此用哈希表就可以容易的解决问题。四数之和II中是在四个数组里面寻找符合题意的四个元素,因此不需要去重等麻烦的操作,哈希表可以解决。
2023-11-04 22:23:25 45 1
原创 代码随想录算法训练营第六天 | 242. 有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
第二遍刷已经很明确什么场合用什么数据结构了,数组适用于一种有限个数的元素,set适用一种大数量元素,map适用两种元素。此外注意 map 中元素写法。
2023-10-28 01:04:28 69 1
原创 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、面试题 02.07. 链表相交、142. 环形链表 II
链表题型理解了就很简单,环形链表可以重点复习一下,是需要一点数学思考的。
2023-10-26 18:59:40 39
原创 代码随想录算法训练营第三天 | 203. 移除链表元素、707. 设计链表、206. 反转链表
链表的题还是很基础的,只要掌握了理论就基本都可以写出来有一点注意的是,删除节点时,C++需要手动释放内存,不释放依然会通过,但这是一个好的习惯,能够节省空间、减少野指针带来的麻烦此外,善用虚拟头结点能让思路更清晰、代码更简洁,考虑情况时不用非常麻烦希望有空能把递归做法深入一下,很好玩。
2023-09-22 21:51:16 469
原创 代码随想录算法训练营第二天 | 977. 有序数组的平方、209. 长度最小的子数组、59. 螺旋矩阵 II
二分法:目前看来使用条件是有序数组,没有重复元素时二分法更简单,时间复杂度一般为O(log n)。重点是要把握好边界!双指针:目的是能在一个循环内完成两个循环的工作,时间复杂度为O(n)。目前练习的题目中包含了快慢双指针和左右双指针,灵活应对。滑动窗口:涉及到子序列在数组中滑动以满足条件,时间复杂度为O(n)。
2023-09-22 11:25:56 558
原创 if(!a)与if(a)
0 时执行语句,即 a == 0 时执行语句。a) 判断a是否为假,若假则执行,作用等价于 if(a == 0)if(a) 判断a是否为真,若真则执行,作用等价于 if(a!if(a) 括号内 a 为真时,即 a!= 0 时执行if语句;
2023-03-26 17:38:56 2133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人