![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
Blizzard_v
An explorer
展开
-
【数据结构】前缀树(字典树) Trie
这样的话利用Trie这个数据结构,如果要搜索某个单词的前缀是否存在时,就非常地方便。原创 2022-09-04 21:47:42 · 276 阅读 · 0 评论 -
【算法】动态规划dynamic programing
备忘录也叫做DP table(把「备忘录」作为一张表,这张表就叫做 DP table)来优化穷举过程,避免不必要的计算。另外,原创 2022-09-04 21:22:13 · 607 阅读 · 0 评论 -
【算法】记忆化搜索(备忘录)
目的:把你已经计算过的东西的结果记下来,存到某个地方去,当下次再遇到它的时候,直接值拿出来用就行了,而不用重新计算,降低时间复杂度。就是,斐波那切数列用有记忆的递归,记下F(2)的值,后面的递归走到F(2)时就不用再往下继续深入了。,数组的索引为1的地方就代表F(2),数组索引对应的那个位置上数组的值就代表F(2)为多少。原创 2022-09-04 20:51:53 · 127 阅读 · 0 评论 -
【算法】贪心算法
每一个做出的选择都是当前看起来最好的选择,只是局部的最优选择,而不是整体的最优选择。贪心算法有时候会和其他算法共同使用,比如回溯。原创 2022-09-04 20:31:24 · 89 阅读 · 0 评论 -
【算法】并查集优化 Union Find Optimization
相对于原并查集代码模板,Quick Find就是在find函数里加了一层递归(紫色框部分),当我找到真正的根节点以后,把真正的根节点直接放在我当前的这个索引上来(索引表示值,索引对应的数组的值表示根节点)并查集优化就是针对并查集的Find和Union两种方法进行优化,即Quick Find和Quick Union。在做题时一般用Quick Find这个模块就足够了!原创 2022-09-03 19:36:20 · 391 阅读 · 0 评论 -
【算法】并查集 Union Find
在下图中左边的根节点是1,右边的根节点是5,它们两的根节点是它们本身。这时候用一条线将1和5相连,则1和5的根节点合并为同一个,这时我们可以把1和5的根节点都当做1(当然也可以都当做5)。Find(6)就是去找6的根节点,此时6的根节点是1。在找某一个元素的根节点时,如果根节点对应的数组存放的数字和索引的值不相等时,则要接着数组的数字往下找,直到索引和数字相等时说明根节点就是这个数。而根节点的根节点就是它本身)。如果说要把某两个元素连起来,则将其中一个元素的原根节点的根节点改成这另一个元素的索引就可以了,原创 2022-09-03 18:48:07 · 134 阅读 · 0 评论 -
【算法】宽度优先搜索BFS
关键思想就是一层一层的遍历,通过队列里的元素的长度来判断这一层是否遍历完了,遍历完就跳到下一层!关于队列的要点就是出去一个元素后,就要立马往里加入对应相关的元素,这样就能用队列的长度判断这一层是否遍历结束。:层层递进,一层一层遍历。:二叉树搜素和图搜素。原创 2022-09-02 18:24:38 · 217 阅读 · 0 评论 -
【算法】深度优先搜索 DFS
关于DFS深度优先遍历,我们可以使用递归法(用栈来代替整个递归的过程)或者迭代法。对于前序、中序和后序遍历,只需将递归函数里的 res.append(root.val) 放在 不同位置 即可,然后调用这个递归函数就可以了,代码完全一样。:先序遍历、中序遍历、后序遍历。原创 2022-09-01 19:58:25 · 129 阅读 · 0 评论 -
【算法】回溯法Backtracking(和DFS,BFS一样属于搜索问题的解的方法)
比如当前局面下,我们有若干种选择,所以我们对每一种选择进行尝试。如果发现某种选择违反了某些限定条件,此时 return到上一层((这里以力扣22题括号生成举例,当n=2时,括号的所有的排列组合如下图所示,这里穷举时不考虑括号是有效还是没效)。” 的意思可以参考力扣22题括号生成来理解,因为有时候所有有效的答案都需要被返回,不止一个。如果尝试某种选择到了最后,发现该选择是正确解,那么就将其加入到解集中。原创 2022-08-31 11:51:33 · 410 阅读 · 0 评论 -
【算法】分治法 Divide&Conquer
1.把一个大问题切割成一个个小问题,然后每个小问题获得一个解后,再把小问题的解合并起来得到大问题的解。3.写代码时单独写一个函数即分治函数。2.用到了递归,自己调用自己。原创 2022-08-30 19:21:02 · 175 阅读 · 0 评论 -
【算法】递归Recursion
所以这就我们为什么说一个高度为k(即k层)的二叉树最多可以由 2^k - 1个叶子节点,也就是递归过程函数调用的次数,所以时间复杂度为 O(2^n),而空间复杂度就是树的高度 O(n)。递归:在函数中调用自己的方法,每次调用自己就是在解决一个子问题。就是用子问题个数乘以解决一个子问题需要的时间。:是2的(n-1)次方。原创 2022-08-28 15:23:33 · 1135 阅读 · 0 评论 -
【算法】滑动窗口 Sliding Window
有一个数组,连续的3个为一组,取最大的和。的一种思想,两个指针指向的元素之间形成一个窗口。优点是减少了重复计算,减少时间复杂度。(比如说给你一个数组,让你求出以k为长度的最大的和或最小的和),或者。:窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。就要想到用滑动窗口法。原创 2022-08-24 14:06:36 · 235 阅读 · 0 评论 -
【算法】二分查找 Binary Search
中,设定左指针和右指针,从中间开始进行查找,然后判断这个元素是大还是小,紧接着把左边界或者右边界的范围缩小,再把这个新范围一分为二,从中间的这个点做比较,重复这个过程。:logN,log的小标是2。原创 2022-08-18 14:24:09 · 131 阅读 · 0 评论 -
【算法】双指针 Two Pointers
两个指针往同一个方向移动(也不能绝对的说是往同一个方向,有时候不是同一个方向的):两个指针面对面移动,比如一个在头一个在尾,同时往中间移动。用两个指针来解决一道题,代表一种技巧。:慢指针+ 快指针,原创 2022-08-18 12:55:49 · 289 阅读 · 0 评论 -
【数据结构】图
【数据结构】图。原创 2022-08-14 21:11:30 · 294 阅读 · 0 评论 -
【数据结构】堆和对应的python堆的常用操作
首先想强调的是一个数组转换成完全二叉树它的结构是唯一的,如下图所示:#堆 Heap,有两种堆:最大堆和最小堆。#堆应用:堆排序,求前k个大(小)的数,第k个大(小)的数 #堆是完全二叉树的结构 且要满足 堆中的每一个节点要么全部都要大于等于孩子节点(这种堆称为最大堆),要么全部都小于等于孩子节点(这种堆称为最小堆) #最大堆的最大值是堆顶元素 #最小堆的最小值是堆顶元素 #访问: 无索引所以没有访问这个概念 #搜索: 时间复杂度O(1):堆的搜索是指查看堆顶元素。原创 2022-08-14 20:24:35 · 325 阅读 · 0 评论 -
【数据结构】树Tree
表示树中的每个元素树最上面的那一盏明灯就是根节点指的是没有孩子的节点都是叶子节点。:是从最底下算起,最底下为0,根节点的高度是最高的:是从根节点从上往下算起,根节点的深度为0,再往下就依次加1:根节点看作第一层,往下依次加1:每一个节点最多只能有两个孩子:除了叶子节点,每个节点都有左右两个孩子,且所有叶子节点都在同一层:从树的根节点,从上到下,从左到右依次填满节点形成的二叉树,简单来说就是按着层的顺序,在每一层里从左到右看节点是否填满。完全二叉树的高度为log2N向下取整(2为底数)+1。原创 2022-08-14 16:21:30 · 2589 阅读 · 0 评论 -
【数据结构】哈希集合和对应的python哈希集合的常用操作
【代码】【数据结构】哈希集合和对应的python哈希集合的常用操作。原创 2022-08-14 14:33:04 · 636 阅读 · 0 评论 -
【数据结构】哈希表和对应的python哈希表的常用操作
【数据结构】哈希表和对应的python哈希表的常用操作。原创 2022-08-12 16:55:32 · 900 阅读 · 0 评论 -
【数据结构】栈和对应的python栈的常用操作
【数据结构】栈和对应的python栈的常用操作。原创 2022-08-11 15:07:48 · 362 阅读 · 0 评论 -
【数据结构】队列和对应的python队列常用操作
【数据结构】队列和对应的python队列常用操作。原创 2022-08-11 14:11:47 · 382 阅读 · 0 评论 -
【数据结构】链表和对应的python链表常用操作
【代码】【数据结构】链表和对应的python链表常用操作。原创 2022-08-07 23:38:30 · 360 阅读 · 0 评论 -
【数据结构】数组和对应的python数组常用操作
【代码】【数据结构】数组和对应的python数组常用操作。原创 2022-08-06 20:28:28 · 430 阅读 · 0 评论