
数据结构与算法
文章平均质量分 77
JoneSen^=^
学生求带
展开
-
二叉树的Morris遍历
二叉树的Morris遍历Morris遍历程序示例:Morris遍历实现二叉树先中后序遍历先序遍历中序遍历后序遍历Morris遍历Morris遍历就是用来遍历二叉树的一种算法,并且能够满足时间复杂度为O(N),额外空间复杂度为O(1)。算法的大致流程如下:使用一个指针cur,从二叉树的根节点出发遍历二叉树。直至cur指向空。判断cur是否有左子树:若没有左子树,直接让cur往右走(cur = cur->right)若有左子树,则找到左子树的最右结点。对最右结点进行判断若最右结点的右孩子为原创 2021-06-03 20:27:29 · 221 阅读 · 0 评论 -
单调栈 c++实现
单调栈 ---c++ 实现什么是单调栈,单调栈的作用单调栈原理数组无重复值时使用单调栈示例代码:数组有重复值时使用单调栈示例代码:完整代码演示:今天学了单调栈,然后自己用c++实现了一下什么是单调栈,单调栈的作用单调栈就是一个栈,并且栈内数据元素是从栈底到栈顶是单调递增或递减的。使用单调栈来解决求一个数组的每个元素的左边和右边离它最近的比它大的值。且时间复杂度为O(N),每个数仅仅入栈出栈1次。以下图为例:数组arr={5,4,6,7};L表示左边离下为i的数组元素最近比它大的值,R表示右边离下为原创 2021-06-01 22:19:35 · 1022 阅读 · 0 评论 -
Manacher算法
Manacher算法Manacher算法使用场景一般的求一个字符串的最长回文子串问题的方法Manacher算法详解Manacher算法使用场景Manacher算法用于解决求一个字符串的最长回文子串长度问题,且时间复杂度为O(N)。一般的求一个字符串的最长回文子串问题的方法Manacher算法详解...原创 2021-05-27 19:58:55 · 189 阅读 · 0 评论 -
KMP算法
KMP算法KMP使用场景一般的暴力方法KMP算法今天又学到了一个新的算法,KMP算法,是用来求子串的,即判断字符串str2,是否为字符串str1的子串。学过以后,自己总结一下,方便加深理解。KMP使用场景判断字符串str2,是否为字符串str1的连续子串。例如:str2 = “1234”,为str1=“ABC1234DE”的子串,但str3=“1234E”不为str1的子串。一般的暴力方法如下图:str1从i位置开始遍历,str2从0位置开始遍历。字符串str1从下标为i的位置一直遍历到下标为原创 2021-05-26 10:42:42 · 392 阅读 · 0 评论 -
跳表
今天花了差不多一天时间研究了一下跳表,参考帖子:https://blog.youkuaiyun.com/u013011841/article/details/39158585然后自己用c++写了一个跳表,如有不对还请纠正:#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include <time.h>using namespace std;#define MaxLevel 12//最大高度为12//构造一个跳表结点,属性包含:键值原创 2021-05-20 19:31:55 · 116 阅读 · 0 评论 -
排序算法汇总
排序算法汇总--c++实现1.三大基本排序1.1 冒泡排序1.2 选择排序1.3 插入排序2.希尔排序3.归并排序4.快速排序5.堆排序6.计数排序7.基数排序1.三大基本排序1.1 冒泡排序#include <iostream>using namespace std;int main(){ int arr[]={2,1,4,21,4,24,9,18}; int len = sizeof(arr)/sizeof(arr[0]); for(int i = 0;i < len原创 2021-05-18 15:31:38 · 352 阅读 · 0 评论 -
c++中的hash_map
c++中的hash_maphash相关哈希函数哈希表c++中的hash_map最近刷左神算法,hash_map经常被用到(hash_map的增删改查时间复杂度都能低至O(1))。但是左神用的都是java中的hash_map,苦于这个原因,只能自己研究一下C++中的hash_map。参考:https://blog.youkuaiyun.com/u010025211/article/details/46653519?utm_medium=distribute.pc_relevant_bbs_down.none-task原创 2021-05-14 23:21:41 · 6046 阅读 · 1 评论 -
哈夫曼问题
哈夫曼问题什么是哈夫曼树如何实现哈夫曼树参考:https://blog.youkuaiyun.com/qq_29519041/article/details/81428934http://c.biancheng.net/view/3398.html什么是哈夫曼树哈夫曼树,即最优二叉树,是一类带权路径长度最短的树所谓树的带权路径长度,就是树中所有的叶节点的权值,乘上其到根节点的路径长度(若根节点为0层,页结点到根节点的路径长度为叶节点的层数)。整个树的带权路径长度是从树根到每一结点的带权路径长度之和。怎么理解原创 2021-05-10 09:52:47 · 404 阅读 · 0 评论 -
数组相关2--小和问题的详解
数据结构与算法---c++实现数组相关--21.小和问题数组相关–21.小和问题问题描述:在一个数组中,每一个数的左边比当数小的数累加起来,称为这个数组的小和、例如:arr[] = {1,3,4,2,5};1左边比1小的数===》没有3左边比3小的数===》14左边比4小的数===》1,32左边比2小的数===》15左边比5小的数===》1,3,4,2故数组arr的小和为1+1+3+1+1+3+4+2 = 16根据题目意思,我们可以使用遍历的方式得到数组的小和,但是时间复杂度为O(N^原创 2021-05-09 20:03:58 · 337 阅读 · 0 评论