数据结构
无名之辈W
不忘初心,方得始终
展开
-
算法和数据结构复习:稳定与非稳定排序、mysql的索引用的是B+树、智能指针、const与#define的区别、排序算法的时间复杂度
文章目录2020.10.07排序算法的一些思考:为什么要分稳定排序和非稳定排序?为什么MySQL要用B+树存储索引? 2020.10.07 排序算法的一些思考:为什么要分稳定排序和非稳定排序? 答: 稳定的排序算法有:冒泡、插入、归并排序;非稳定的排序算法有:快速排序、堆排序等。 稳定排序的一个例子:比如班里的同学已经按照学号拍好序了。现在要按照身高进行排序。如果是稳定排序好之后,身高相同的同学,学号还是按顺序的。 所以其实稳定排序就是有两个排序关键字的时候,稳定排序可以让第一个关键字排序的结果继续服务与原创 2020-11-04 22:21:58 · 135 阅读 · 0 评论 -
键指offer——面试题10:斐波那契数列(p73-79)、斐波那契的应用:青蛙跳台阶问题
文章目录题目描述递归和循环递归循环斐波那契数列(Fibonacci sequence)笔记long关键字unsigned 题目描述 题目一:求斐波那契数列的第n项。 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下: 分析: 方法一:递归方式,但效率不高,因为在斐波那契数列计算过程中重复的计算太多,因此时间复杂度是以n的指数方式递增的。 long long Fibonacci(unsigned int n) { if(n = 0) return 0; i原创 2020-05-22 15:06:29 · 462 阅读 · 0 评论 -
剑指offer——面试题41:数据流中的中位数 + make_heap()、push_heap()、pop_heap()的用法
题目描述: 分析: 代码:原创 2020-08-21 23:52:01 · 252 阅读 · 0 评论 -
十大经典排序算法之 —— 三、堆排序
堆排序 堆(Heap)数据结构简介 堆就是用数组实现的二叉树,所以它没有使用复指针或者子指针。堆满足性质: 堆中的某个节点的值总是不大于或不小于其父节点的值 堆总是一颗完全二叉树 堆是非线性数据结构,相当于一维数组,有两个直接后继。 一个从低到高有序排列的数组是以有效的最小堆,比如[ 10, 14, 25, 33, 81, 82, 99 ],我们可以将这个堆画出来: 注意: 并不是每一个最小堆都是一个有序数组!要将堆转换成有序数组,需要使用堆排序。 树的高度 是指从树的根节点到最低的叶节点所需要的步数原创 2020-08-21 22:12:12 · 326 阅读 · 0 评论 -
剑指offer——面试题26:树的子结构
题目描述(from nowcoder): 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 分析: 树1是原树,树2是要被匹配的树。 思路总体分为两部分,第三部分是对特殊情况的处理: 遍历树1找与树2根值相同的节点,找打了之后就继续判断其结构是否相匹配; 如果不匹配,则返回到开始判断的节点,继续遍历树1的左子树与右子树重复步骤1的做法,直到树2被遍历完成之后都和树1的某一部分匹配为止返回true,否则返回false。 整体实现思路完成之后,考虑特殊情况..原创 2020-08-06 11:48:59 · 85 阅读 · 0 评论 -
leecode19:删除链表的倒数第k个节点(笔记:delete和malloc的区别)
题目描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 代码:AC /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x原创 2020-07-16 16:32:43 · 130 阅读 · 0 评论 -
剑指offer——面试题18:删除链表的节点
文章目录题目描述题目一:在O(1)时间内删除链表节点 题目描述 题目一:在O(1)时间内删除链表节点 题目描述: 在O(1)时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。链表节点定义如下: //链表节点定义 struct ListNode { int Value; ListNode* Next; } void DeleteNode(ListNode** pListHead, ListNode*pToBeDeleted); 思路分析: 首先删除链表中原创 2020-07-16 11:57:57 · 172 阅读 · 0 评论 -
C++中的STL基础复习——unordered_set和set
文章目录STL——unordered_setSTL——set关于这个STL(Standard Template Library)标准模板库 STL——unordered_set unordered_set基于哈希表,是无序的,是一个无序的容器。 头文件 #include<unordered_set> 定义以及常用的操作 定义: unordered_set<int> set; 迭代器操作: begin返回unordered_set第一个元素的迭代器 end返回unord原创 2020-06-25 16:04:54 · 1184 阅读 · 0 评论 -
键指offer——面试题9:用两个栈实现队列
面试题9:用两个栈实现一个队列 题目描述: 已知队列的声明如下,请实现他的两个函数appendTail个deleteHead,分别完成在队列的尾部插入节点和在队列头部删除节点的功能。 //声明两个栈 template <typename T> class CQueue { public: CQueue(void); ~CQueue(void); void appendTail(const T& node); T deleteHead(); private: st原创 2020-06-24 15:55:54 · 107 阅读 · 0 评论 -
键指offer——面试题8:二叉树的下一个节点
面试题8:二叉树的下一个节点 题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回 。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 分析: 中序遍历的顺序:左根右 找二叉树的下一个节点,分为两种情况来分析: 1)该节点有右子树:有右子树了,那这个节点的下一个节点就是右子树的最左节点喽; 2)该节点没有右子树: 该节点是父节点的左子树,那他的下一个节点就是他的父节点; 该节点是父节点的右子树,那他的下一个节点就要沿着父节点的指针一直向上遍历,直到找到一个是他父原创 2020-06-16 11:25:14 · 129 阅读 · 0 评论 -
键指offer——面试题7:重建二叉树(p60-64)
二叉树这里给我快看瞌睡了,大家还是要保护好眼睛呐~ 面试题7:重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 分析: 解决方法就是将大的问题转化成一个个小的问题解决,根据前序遍历找到这个根节点,然后就可以在中序遍历里找到这个根节点,然后将其分为左子树与右子树,再将左子树与右子树分别看成一个二叉树去原创 2020-06-05 16:11:54 · 136 阅读 · 0 评论 -
leecode237—— 删除链表中的节点
题目描述: 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 说明: 链表至少包含两个节点。 链表中所有节点的值都是唯一的。 给定的节点为非末尾节点并且一定是链表中的一个有效节点。 不要从你的函数中返回任何结果。 分析: 无需定义链表,因为给的参数就只有要删除的这个节点指针。题目中是非尾节点,但有可能为头结点,需要注意 。链表不可能为空,因为至少包含了两个节点。 整个删除思想就是:先定义一个节点是原创 2020-06-03 15:42:57 · 124 阅读 · 0 评论 -
leecode面试题 02.02——返回链表倒数第 k 个节点
题目描述: 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 说明:给定的 k 保证是有效的。 分析: 先想到的就是将链表中的元素放到一个栈里边保存,然后从栈里边顺序输出第k个值即可,但超出了时间限制。pass 代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), n原创 2020-06-03 15:08:27 · 136 阅读 · 0 评论 -
键指offer——面试题6:从尾到头打印链表+链表知识复习
周一原创 2020-06-01 22:04:53 · 141 阅读 · 0 评论