数据结构与算法
文章平均质量分 69
供自己学习使用
wxl@
已迁至知乎,CSDN博客不再更新
展开
-
python数据结构(内存,类型本质)
计算机内存中,一个字节等于8位,一个字节也是一个储存单元。就32位系统而言,储存一个整形数字需要四个字节,比如int a = 1,那么计算机首先将十进制的1转换为2进制,而且位数是4x8=32位,那么这个整形数字1在计算机中储存的方式如下图所示:假设这块空间的地址为ox23,那么计算机需要提取其内容的时候,首先找到这块区域,然后根据它的数据类型将其转换成人类认识的内容,比如,如果这块区域储存的...原创 2020-03-07 10:59:01 · 502 阅读 · 0 评论 -
蓝桥杯C++使用unordered_set和unordered_map报错如何处理
拿神盾与积木游戏这道题来讲,按照正常情况,我使用了unordered_set和auto,然后结果使劲报错:解决方法1:在导入所有的unordered_xx包的时候,添加tr1,然后使用using namespace std::tr1如:#include<tr1/unordered_set>#include<tr1/unordered_map>using namespace std::tr1;还有记得auto不能使用。解决方法2:将所有的unordered_去掉,原创 2021-04-16 17:34:43 · 2112 阅读 · 6 评论 -
652.寻找重复的子树
题目链接深度优先(C++)解题思路:将每一棵子树序列化,即对于一棵子树,转化为:string(root)+string(root.left)+string(root.right)string(root)+string(root.left)+string(root.right)string(root)+string(root.left)+string(root.right)对于这个序列需要使用一个散列表来储存其出现的次数,如果次数为1,即之前遇到过一次,就将该根节点放入结果列表中;否则不放入。cla原创 2021-02-15 18:19:30 · 216 阅读 · 0 评论 -
105.从前序遍历与中序遍历构建二叉树
构建二叉树可以使用前序遍历+中序,或者中序+后序,但是前序+后序无法构建,原因是前序遍历列表中,第一个元素一定是根节点,剩余的元素是左子树的前序遍历+右子树的前序遍历列表,即前序遍历结构为:[root+[left+right]][root+[left+right]][root+[left+right]];而后序遍历结构为:[[left+right]+root][[left+right]+root][[left+right]+root],如果给定前序遍历和后序遍历结果,仅能推断出来的是谁是当前树的根结点,谁.原创 2021-02-14 22:01:24 · 373 阅读 · 1 评论 -
654.最大二叉树
题目链接递归思路首先求出给定列表的最大值,然后将其值作为根结点的值,然后将左子序列作为新列表递归传入函数中;将右子序列作为新列表递归传入函数中。class Solution: def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode: if nums == []: return None core = max(nums) core_index原创 2021-02-14 11:57:42 · 69 阅读 · 0 评论 -
114.二叉树展开为链表
题目链接将左边展开->右边展开->左边放到右边->左边置None。if root is not None: self.flatten(root.left) #先展平左子树 self.flatten(root.right) #再展平右子树 temp = root.left #存左子树 if temp is not None: while temp.right is not None: #找到左子树的底部 temp = temp.right原创 2021-02-13 16:00:41 · 66 阅读 · 0 评论 -
116.填充每一个节点的next指针
题目链接题解递归算法递归算法就需要思考整个流程能否分割成若干个小项目,将小项目完成并联合起来就完成了大项目,所以将问题细化的思维很重要。观察下面的这幅图:很容易得出规律是:每一个节点的左右子节点互相连接,然后得到这样的思路:connect(Node root) { if root is None { return root } # 每一个父节点的左右结点连接 root.left.next = root.right # 将左节点作为父节点重复上述步骤原创 2021-02-13 10:16:16 · 114 阅读 · 0 评论 -
226.翻转二叉树
链接:翻转二叉树前序遍历class Solution {public: TreeNode* invertTree(TreeNode* root) { if (root == nullptr) return nullptr; // 先处理根节点,即先序遍历 TreeNode* temp = root->right; // 保存右节点 root->right = root->left; root-&g原创 2021-02-11 13:46:57 · 78 阅读 · 0 评论 -
插入排序---直接插入排序
思路首先将给定数组的第一个元素看作有序序列,有序序列后续的一个元素看作带插入数据,带插入数据后面的序列为无序序列.现在默认是升序排序,接下来的每一步,将待插入数据从有序序列的后面元素开始往前逐一比较,如果遇到比待插入数据大的元素,就将该元素往后移动,腾出来位置,按照这样的思路将无序序列中的每一个数据都插入到有序序列中。无哨兵位无哨兵位就是平常的思路,比如给定一个长度为10的数组,将其按照直接插入排序,C++C++C++代码如下:#include<iostream>using n原创 2021-02-06 18:01:53 · 245 阅读 · 0 评论 -
时间复杂度、空间复杂度的分析--王争数据结构与算法学习笔记
我们使用时间复杂度和空间复杂度来衡量算法代码的执行效率,那么为什么要这么麻烦需要自己去衡量一遍呢?把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度分析呢?这种分析方法能比我实实在在跑一遍得到的数据更准确吗?这种评估算法执行效率的方法是正确的。很多数据结构和算法书籍还给这种方法起了一个名字,叫事后统计法。但是,这种统计方法有非常大的局限性。大O 表示法公式:T(n)=O(f(n))T(n)=O(f(n))T(n)=O(f(n))代码分析示例:.原创 2021-01-17 16:12:37 · 292 阅读 · 0 评论 -
数组--王争数据结构与算法学习笔记
数组看起来简单基础,但是很多人没有理解这个数据结构的精髓。数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。数组在逻辑上是一种线性表数据结构. 数组在物理上是一种顺序的存储结构。 数组定义的关键词:1.连续的内存空间2.相同类型的数据.线性表: 数据排成像一条线一样的结构.每个线性表上的数据最多只有前和后两个方向.非线性表: 数据之间并不是简单的前后关系. 线性表数据结构包括: 数组,链表,队列,栈. 非线性表数据结构包括: 二叉树,堆,图 。1.数.原创 2021-01-17 23:14:27 · 556 阅读 · 0 评论 -
链表--王争数据结构课程学习笔记
如何使用链表实现LRU在操作系统中常见的缓存淘汰策略有:先进先出策略 FIFO(First In,First Out)、最少使用策略 LFU(Least Frequently Used)、最近最少使用策略 LRU(Least Recently Used)。对内存要求方面: 数组对内存的要求更高。因为数组需要一块连续内存空间来存放数据。(可能出现的问题就是:内存总的剩余空间足够,但是申请容量较大的数组时申请失败) 链表对内存的要求较低,是因为链表不需要连续的内存空间,只要内存剩余空间足够,无论是否连续,用原创 2021-02-01 14:36:16 · 213 阅读 · 0 评论