数据结构
无名之辈W
不忘初心,方得始终
展开
-
算法和数据结构复习:稳定与非稳定排序、mysql的索引用的是B+树、智能指针、const与#define的区别、排序算法的时间复杂度
文章目录2020.10.07排序算法的一些思考:为什么要分稳定排序和非稳定排序?为什么MySQL要用B+树存储索引?2020.10.07排序算法的一些思考:为什么要分稳定排序和非稳定排序?答:稳定的排序算法有:冒泡、插入、归并排序;非稳定的排序算法有:快速排序、堆排序等。稳定排序的一个例子:比如班里的同学已经按照学号拍好序了。现在要按照身高进行排序。如果是稳定排序好之后,身高相同的同学,学号还是按顺序的。所以其实稳定排序就是有两个排序关键字的时候,稳定排序可以让第一个关键字排序的结果继续服务与原创 2020-11-04 22:21:58 · 137 阅读 · 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 · 463 阅读 · 0 评论 -
剑指offer——面试题41:数据流中的中位数 + make_heap()、push_heap()、pop_heap()的用法
题目描述:分析:代码:原创 2020-08-21 23:52:01 · 253 阅读 · 0 评论 -
十大经典排序算法之 —— 三、堆排序
堆排序堆(Heap)数据结构简介堆就是用数组实现的二叉树,所以它没有使用复指针或者子指针。堆满足性质:堆中的某个节点的值总是不大于或不小于其父节点的值堆总是一颗完全二叉树堆是非线性数据结构,相当于一维数组,有两个直接后继。一个从低到高有序排列的数组是以有效的最小堆,比如[ 10, 14, 25, 33, 81, 82, 99 ],我们可以将这个堆画出来:注意: 并不是每一个最小堆都是一个有序数组!要将堆转换成有序数组,需要使用堆排序。树的高度 是指从树的根节点到最低的叶节点所需要的步数原创 2020-08-21 22:12:12 · 329 阅读 · 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 · 87 阅读 · 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 · 131 阅读 · 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 · 173 阅读 · 0 评论 -
C++中的STL基础复习——unordered_set和set
文章目录STL——unordered_setSTL——set关于这个STL(Standard Template Library)标准模板库STL——unordered_setunordered_set基于哈希表,是无序的,是一个无序的容器。头文件#include<unordered_set>定义以及常用的操作定义:unordered_set<int> set;迭代器操作:begin返回unordered_set第一个元素的迭代器end返回unord原创 2020-06-25 16:04:54 · 1187 阅读 · 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 · 109 阅读 · 0 评论 -
键指offer——面试题8:二叉树的下一个节点
面试题8:二叉树的下一个节点题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回 。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析:中序遍历的顺序:左根右找二叉树的下一个节点,分为两种情况来分析:1)该节点有右子树:有右子树了,那这个节点的下一个节点就是右子树的最左节点喽;2)该节点没有右子树:该节点是父节点的左子树,那他的下一个节点就是他的父节点;该节点是父节点的右子树,那他的下一个节点就要沿着父节点的指针一直向上遍历,直到找到一个是他父原创 2020-06-16 11:25:14 · 130 阅读 · 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 · 138 阅读 · 0 评论 -
leecode237—— 删除链表中的节点
题目描述:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为:说明:链表至少包含两个节点。链表中所有节点的值都是唯一的。给定的节点为非末尾节点并且一定是链表中的一个有效节点。不要从你的函数中返回任何结果。分析:无需定义链表,因为给的参数就只有要删除的这个节点指针。题目中是非尾节点,但有可能为头结点,需要注意 。链表不可能为空,因为至少包含了两个节点。整个删除思想就是:先定义一个节点是原创 2020-06-03 15:42:57 · 125 阅读 · 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 · 138 阅读 · 0 评论 -
键指offer——面试题6:从尾到头打印链表+链表知识复习
周一原创 2020-06-01 22:04:53 · 143 阅读 · 0 评论