- 博客(20)
- 收藏
- 关注
原创 算法基础20:回溯算法1
回溯法通常可以抽象为一颗N叉树。树的宽度通常为在回溯法中处理的集合的大小,通常用for循环进行遍历。纵方向用递归来处理。可以把回溯法抽象成一个图形结构。
2024-04-02 21:24:07 310
原创 算法基础17 二叉树
思路:通过中序遍历,可以将所有的子序列按照顺序排列,使用两个指针一前一后去累计所有相等数值的情况。思路:我的一个误区是默认了 查找的是相邻的节点之间的最小绝对差,题目问的是所有节点之间的。基于二叉搜索树的特性,按照中序遍历则可以得到单调序列,进行相减查询即可。题目链接:leetcode236。
2024-03-28 13:42:13 288
原创 算法基础15 平衡二叉树 二叉树的所有路径 左叶子之和
平衡二叉树的条件是 左右子树长度差不超过1. 从上到下的递归方法需要不断去查询二叉树的左右子树的高度,然后再去做是否为平衡树的判断。只要碰到没有左子树和右子树的情况就记录进去。多加一个queue用于记录所有的组合方式。左叶子指的是,必须得是没有任何孩子的左侧节点。每个节点只有一个根节点。时间复杂度O(n^2)
2024-03-23 16:48:26 282
原创 算法基础13 二叉树的层序遍历
思路:不需要将所有数值都取出来,只需每遍历完一层,将该层的最后的节点加入到队列中即可。将左子树的左孩子和右子树的右孩子;左子树的右孩子和右子树的左孩子成对存储到队列中即可。思路:仅需将从根到叶子的遍历结果 reverse一下即可。
2024-03-20 15:31:01 263
原创 算法基础10 栈与队列2
如果遇到数字就将其压入到栈中,遇到符号就将之前的数字弹出,进行计算,把计算完的数字再压入到栈中。题目链接:leetcode1047。
2024-03-16 13:14:22 302
原创 算法基础9:栈与队列
和用栈实现队列类似,但是需要注意的一个地方是:每一次被Push一个新的值得时候,就要把之前的排好顺序的值都依次push进来。保证最新push进来的值作为最先会被pop出去的存在。
2024-03-15 17:38:55 243
原创 算法基础8:字符串,KMP算法
当我们匹配一个字符串的时候,发现不对,如果前面有一样的,那就从一样的地方再匹配。但是机器需要知道前面是否一样,一样的位置在哪里。这就需要构建一个数组,告诉机器,如果匹配不一样,如何向前找。按顺序按照人的理解去实现让机器能够类似实现匹配的代码。构建数组的逻辑和匹配的逻辑一样。
2024-03-14 19:05:04 357
原创 算法基础7:字符串1
2. 去除掉所有多余的空格,第一个字母之前和最后一个字母之后的空格,作为特殊进行处理。其他的空格删除通过判断是否和前一个一样都等于空格,进行删除。可以参考四数之和等的去重判断的思路。3. 对空格处理完的字符串进行翻转,第一次翻转。4. 对于单个单词进行翻转,第二次翻转。题目链接:leetcode151。1.不建立新的空间去做修改。
2024-03-13 21:06:37 280
原创 算法基础5:哈希表
编程遇到的问题:vector的赋值初始化,应该是vector{0,1,2}等,初始化列表的形式进行。vector(2,1)表示列表里面共两个元素,初始化值为1。unordered_set存储唯一元素的集合,用于检查是否存在。用于检查是否存在,同时存储其他信息,比如出现的次数,出现的位置等信息。常见使用形式:数组, std::unordered_set, std::unordered_map。数组适用于所检查的项连续且比较少的情况下, 比如检查26个英文字母。
2024-03-11 09:10:49 252
原创 算法基础4:链表2
其实可以声明一个dummyhead和一个遍历的结点就可以了,但是我怕我晕了,所以就多声明了几个。快慢指针,当两个指针刚好间隔N+1时,快指针指向终点时,慢指针指向要删除的节点的前一个节点。
2024-03-09 19:56:01 430
原创 算法基础1:数组,二分法
通过两层for循环来实现,每发现一个要移除的元素,就把后面的所有值全部挪前一位。需要注意的是,如果删除了,重新排了序列,就需要对当前位置再次进行判断,不然如果重复出现val,就无法删掉第二次的val,i–存在的意义。所以,数组确定好大小后,内存大小不能修改,不能删除元素,只能覆盖。数组最大的特点: 在内存中存储时空间连续。
2024-03-06 20:49:08 1048
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人