- 博客(20)
- 收藏
- 关注
原创 回溯算法part01
因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。子集问题:一个N个数的集合里有多少符合条件的子集。排列问题:N个数按一定规则全排列,有几种排列方式。组合问题:N个数里面按一定规则找出k个数的集合。切割问题:一个字符串按一定规则有几种切割方式。棋盘问题:N皇后,解数独等等。
2024-06-19 19:17:25
116
原创 修建二叉搜索树
pre指针的使用技巧,我们在二叉树:搜索树的最小绝对差 (opens new window)和二叉树:我的众数是多少?(opens new window)都提到了,这是常用的操作手段。本题依然需要一个pre指针记录当前遍历节点cur的前一个节点,这样才方便做累加。
2024-06-19 15:56:29
111
原创 二叉搜索树中的众数和最小绝对值之差
后序遍历(左右中)就是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑。遇到这个题目首先想的是要是能自底向上查找就好了,这样就可以找到公共祖先了。接下来就看如何判断一个节点是节点q和节点p的公共祖先呢。回溯啊,二叉树回溯的过程就是从低到上。那么二叉树如何可以自底向上查找呢?
2024-06-19 10:43:13
119
原创 二叉树|part04
有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。给定一个二叉树,判断其是否是一个有效的二叉搜索树。
2024-06-18 17:07:32
147
原创 第六章 二叉树part03
那么为什么使用了vector 结构来记录路径呢?因为在下面处理单层递归逻辑的时候,要做回溯,使用vector方便来做回溯。我们先使用递归的方式,来做前序遍历。要知道递归和回溯就是一家的,本题也需要回溯。
2024-06-17 22:24:17
149
原创 第六章 二叉树 part02
正是因为要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。那么层序遍历可以不可以呢?只要把每一个节点的左右孩子翻转一下的遍历方式都是可以的!
2024-06-17 21:32:28
127
原创 第五章 栈与队列part01
栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。HP STL 其他版本的C++ STL,一般是以HP STL为蓝本实现出来的,HP STL是C++ STL的第一个实现版本,而且开放源代码。队列中先进先出的数据结构,同样不允许有遍历行为,不提供迭代器, SGI STL中队列一样是以deque为缺省情况下的底部结构。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。
2024-06-15 21:26:33
244
原创 字符串part02 ||151.翻转字符串里的单词 卡码网:55.右旋转字符串28. 实现 strStr() 459.重复的子字符串 字符串总结 ●双指针回顾
当然,我们在判断 s + s 拼接的字符串里是否出现一个s的的时候,要刨除 s + s 的首字符和尾字符,这样避免在s+s中搜索出原来的s,我们要搜索的是中间拼接出来的s。因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以判断字符串s是否由重复子串组成,只要两个s拼接在一起,里面还出现一个s的话,就说明是由重复子串组成。坑:不同人next数组表示不同!文章中字符串的前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串。s.erase(n);
2024-06-15 12:47:53
463
原创 第四章 字符串part01 今日任务 ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54.替换数字
+left, --right) 第一二部分可以有两个操作语句。
2024-06-13 10:46:07
198
原创 第三章 哈希表part02||● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和
int的范围在21亿左右。
2024-06-12 17:03:11
323
原创 第三章 哈希表part01|| 1. 两数之和 202. 快乐数 349. 两个数组的交集 242.有效的字母异位词
【代码】第三章 哈希表part01|| 1. 两数之和 202. 快乐数 349. 两个数组的交集 242.有效的字母异位词。
2024-06-12 11:07:57
184
原创 第二章 链表part02|24. 两两交换链表中的节点19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
循环时要判断fast 指针是否为nullptr,否则报错。要先判断链表是否为空,否则赋值操作会报错。
2024-06-12 09:45:41
136
原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
第一眼没思路,原因担心除以2之后有小数,int会直接取整数nums.size():C++中size()函数除了跟length()函数一样可以获取字符串长度之外,还可以获取vector类型的长度。使用while去循环找target没有写return -1,需要+1或者-1,不然会陷入死循环。二分法复杂度O(logn)用于返回两个数总结:有序数组,找一个数。
2024-05-22 17:23:12
620
转载 python中路径写法前缀符号含义
url读取本地文件格式:url = ‘file:///E:/Filename/file.txt’在python的字符串中\是转义符,如果想让\保持原来的意思,可以在路径前加 r 避免转义。注:r的全称是raw string,即原始字符串常量,可以让字符保持原来的意思。
2023-09-15 18:34:28
89
原创 【无标题】
相当于int* const ref =&a(a的地址);并且是固定的,*ref是可以改变的。引用必须初始化,引用在初始化之后不能再改变(指针常量)。数据类型 &别名 =原名。引用的本质是一个指针常量,
2023-02-25 15:17:35
25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人