数据结构
文章平均质量分 95
数据结构
小 琛
你什么都没有,却还为我的梦加油
展开
-
算法学习——动态规划的学习
作者:小 琛欢迎转载,请标明出处引言:动态规划是算法中较难的内容,常常被用来区分学习者的档次,笔者也是在面试中发现了这个问题,故而回头认真学习并总结递归算法,希望能够帮助到阅读的你文章目录动态规划的思想动态规划的具体实现步骤入门级别的两个例子斐波那契数列变态跳台阶问题动归的难点,当分析复杂化经典题目1、string break经典题目2、三角形最小路径和动态规划的思想“世界上的所有问题,都可以化繁为简,化简为空”。这种思想本事就是一门艺术,就像写代码的我们,同样在做一门艺术。1. 动归从某原创 2021-03-07 12:28:14 · 404 阅读 · 0 评论 -
数据结构——二叉树前序中序后续的递归、非递归遍历
作者:小 琛欢迎转载,请标明出处因为二叉树是最基本的数据结构,解法也比较简单,这里就不做过多的讲解,直接上代码#pragma once#include <iostream>#include <stack>using namespace std;template <class T>struct BinaryNode{ struct BinaryNode* _left; struct BinaryNode* _right; struct Bina原创 2020-12-10 19:40:16 · 131 阅读 · 1 评论 -
数据结构——哈希思想应用之布隆过滤器
作者:小 琛欢迎转载,请标明出处位图和哈希表的不足假设现有海量数据,例如10亿个字符用哈希表存储,缺点:浪费空间用位图存储用户记录,缺点:不能处理哈希冲突且只能处理整形哈希思想和位图的巧妙结合理想容器:该容器存储思想仍为位图。但却可以存储字符,且可以处理哈希冲突。哈希字符转换在之前的哈希表编写中,哈希拥有一个函数,该函数可以自动识别存储内容。实际的底层实现为:将不同类型转换为整形。哈希转换算法有很多种,其效果就是将一个字符串转换为一个整形的值返回,例如下面的:struct Ha原创 2020-10-27 17:16:12 · 185 阅读 · 0 评论 -
数据结构——哈希思想应用之位图
作者:小 琛欢迎转载,请标明出处引言一道腾讯的题目:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中通常解法:1、直接遍历法:挨个遍历,直到找到为止。效率较差,最坏情况为O(N)2、二分查找法:先排序(O(NlogN)),再利用二分查找: logN3、利用unordered_map和unordered_set(红黑树,哈希表)解决。上面三种方法。效率最高且使用方便程度高的为第三种,但数据量非常大的时候例如40亿,需要的内存也非常大,该方法原创 2020-10-26 11:25:01 · 125 阅读 · 0 评论 -
数据结构——哈希
作者:小 琛欢迎转载,请标明出处内容提要哈希思想(重点)哈希冲突闭散列解决法开散列解决法(重点)哈希思想在之前的存储结构中(搜索树、红黑树),都有其缺点。例如:在查找一个元素时,必须要经过关键值的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(logN ),搜索的效率取决于搜索过程中元素的比较次数。这与其本身特质有关,它们毕竟是一种类似遍历的方法查找。何为理想的搜索方法?可以不经过任何比较,一次直接从表中得到要搜索的元素。 通过某种函数(hashFunc)使元素原创 2020-10-23 16:58:45 · 141 阅读 · 0 评论 -
数据结构——红黑树
作者:小 琛欢迎转载,请标明出处红黑树的概念红黑树,是一种二叉搜索树,它在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。AVL树确保平衡是通过调节平衡因子实现,即每个节点平衡因子绝对值不大于1, 红黑树通过对任何一条从根到叶子的路径上各个结点着色方式的限制,而红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。相比较之前的AVL树,红黑树对于高度的要求比AVL差一些,但由于现代硬件设备的优化,这种差异几乎可以忽略。红黑树的特点红黑树要求:最长路径的长度不会大于最短原创 2020-10-19 17:41:33 · 135 阅读 · 0 评论 -
数据结构——AVL树
作者:小 琛欢迎转载,请标明出处AVL树的概念与定义二叉搜索树在很大程度上优化了查找的效率,但如果插入的数据非常有序(例如下图),则二叉搜索树就会退化成单一的链式结构,这种情况下的查找等操作就非常消耗时间。平衡二叉树就因此引入。定义当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),实现降低树的高度,从而减少平均搜索长度。对于每个节点的平衡因子值_bf,_bf=右子树高度-左子树高度。因此在一棵树的左边插入,平衡因子减一;右边插入平衡原创 2020-10-16 16:21:28 · 368 阅读 · 0 评论 -
数据结构——二叉搜索树
作者:小 琛欢迎转载,请标明出处引言二叉树是数据结构中的一个常见结构,而二叉搜索树则是一种特殊的二叉树,是高阶数据结构(如AVL树、红黑树)的基础。二叉树的特点二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。它的左右子树也分别为二叉搜索树。平衡二叉树的几个重要操作查找1.若树为空,则返回nullptr。2.不为空,则看下图:插入当原创 2020-09-23 20:42:01 · 185 阅读 · 0 评论 -
数据结构——栈的概念和实现
作者:小 琛欢迎转载,请标明出处栈的概念及结构栈一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现栈的代码实现有两种方法:通过数组和...原创 2020-03-05 17:11:17 · 319 阅读 · 0 评论 -
数据结构——囊括面试笔试考点的最全排序算法 (手把手教你学会全部排序算法)
作者:小 琛欢迎转载,请标明出处引言:排序算法是生活中一种常见算法,用途非常广泛。因此在任何的笔试面试中都几乎为必考内容。本博文汇总所有的排序算法,分析其逻辑思路,并进行代码实现,同时对其性能进行分析。插入排序逻辑思想将一个数插入到另一组已知的有序数列中去。我们可以将待排序的一组数的第一个数看为一个已知的有序数列,将第二个数进行插入并形成新的有序数列,之后再将第三个数插入到前两个数构成...原创 2020-02-26 20:25:40 · 598 阅读 · 0 评论 -
数据结构——带头双向循环链表的实现
作者:小 琛欢迎转载,请标明出处原创 2019-12-04 16:13:29 · 171 阅读 · 0 评论 -
数据结构——单链表环的问题
作者:小 琛欢迎转载,请标明出处引言:对于单链表有一类非常爱考的面试题目:环所谓环。即一个单链表,在进行链的过程中,出现了指针的重复指向,导致整个链表出现环的效果,如图:而针对这一现象,有许多题目亦有许多解决思路快慢指针解决环的问题在前面的博文中,我们提到过这一思想,快慢指针可以用来寻找一个链表的中间节点,同时可以寻找单链表倒数第K个节点,而在此处,它大有作用我们常常定义两个指针,...原创 2019-12-03 18:08:46 · 304 阅读 · 0 评论 -
数据结构——以给定值x为基准将链表分割成两部分
class Partition {public: ListNode* GetNode(int x) { ListNode* newhead=(ListNode*)malloc(sizeof(ListNode)); newhead->next=NULL; newhead->val=x; return ne...原创 2019-12-01 15:15:44 · 820 阅读 · 0 评论 -
数据结构——将两个有序链表合并(不允许开辟新的链表)
作者:小 琛欢迎转载,请标明出处题目:题目分析该题本身使用到的方法并没有多少难度,也就是单链表基本的插入,而在细节处理上却很容易犯错思路讲解首先画图(如下),绘制两个有序单链表。我们可以以一个为“基“,对”基“链表使用双指针法遍历,对另一个链表使用一个指针即可。当非“基”链表指针的当前指向值大于或等于“基”链表的第一个指针指向值且小于或等于第二个指针指向值,将此时的非“基”项使用尾插...原创 2019-11-25 15:40:19 · 1022 阅读 · 2 评论 -
数据结构——判断一个链表是否为回文结构,时间复杂度O(N)空间复杂度为O(1)
作者:小 琛欢迎转载,请标明出处题目:思路一:该题目的最后一句话目的为降低难度,我们完全可以就这句话定义一个大小为900的数组,然后遍历该链表两次,第一次记录链表的每一个值并存入数组,并以一个变量count记录总数。第二次遍历的时候我们进行比对,数组倒着走,链表正常走,全部相等则为互文注意事项:1、因为我们遍历链表的条件是一个指针是否为空,所以记录数量的count的值在第一次遍历后...原创 2019-11-20 20:58:50 · 368 阅读 · 0 评论 -
数据结构——快慢指针解决单链表的问题
作者:小 琛欢迎转载,请标明出处引言:单链表作为面试、oj常考的知识点,其中有一类题目都可以用快慢指针来解决,本博文讲述这个思想何为快慢指针思想快慢指针,故名思意:有两个或多个指针,让其在链表中持续走,但他们的走的速度不同,从而达到一些特有的目的。例如寻找链表的中间值,看下图什么时候使用快慢指针分析快慢指针的性质,我们得出:1、当寻找一些特定的值,例如中间节点,第k节点等2、...原创 2019-11-20 20:37:39 · 170 阅读 · 0 评论 -
数据结构——翻转单链表
作者:小 琛欢迎转载,请标明出处题目:思路一:要翻转链表,我们可以翻转其指针的指向。而要实现该操作,我们则需要三个指针,其中两个用来翻转,第三个用来保存下一个的地址我们要进行的操作:1、n1的初值为头,n2为头的next,n3为n2的next,以n2是否为空作为循环判断条件2、在进入循环前将n1的next置为空,即n1作为尾3、每次循环的操作为:n2的next置为n1,n1...原创 2019-11-19 17:46:43 · 244 阅读 · 0 评论 -
数据结构——不带头节点的单链表
作者:小琛欢迎转载,请标明出处单链表的概念概念:**链表是一种物理存储结构上非连续、非顺序,逻辑上连续的结构。**是通过链表中的指针链 接次序实现的。如下图:单链表的实现鉴于后续的面试和oj题目类型,这里实现不带头节点的单链表Plist.h#ifndef _LIST_H__#define _LIST_H__#include <stdio.h>#include &l...原创 2019-11-17 20:20:07 · 432 阅读 · 0 评论 -
数据结构——时间复杂度
作者:小 琛欢迎转载,请标明出处时间复杂度概念用来表示一个算法的理论上的耗时时间时间频度一个算法中,语句执行的次数,被称为时间频度T(n)时间复杂度存在某个辅助函数f(n),当n->∞时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数,记做T(n)=O(f(n)),则称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。用大O来表示时间复杂...原创 2019-11-14 19:15:10 · 134 阅读 · 0 评论 -
数据结构——顺序表
作者:小 琛欢迎转载,请标明出处原创 2019-11-12 20:21:48 · 107 阅读 · 0 评论