![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 85
1
帝国无伤
这个人很懒,什么都没没留~
展开
-
【算法】递归、搜索与回溯专题
递归就是函数自己调用自己。原创 2023-12-12 20:41:00 · 1296 阅读 · 0 评论 -
【算法】链表相关算法题
同时遍历两个链表,取 val 小的那个节点尾插到新链表中。原创 2023-12-02 13:55:13 · 898 阅读 · 0 评论 -
【算法】经典算法题合集
题目解析算法原理代码编写2. 复写零算法原理代码编写3. 快乐数算法原理代码编写4. 盛最多水的容器算法原理代码编写5. 有效三角形的个数算法原理代码编写6. 查找总价格为目标值的两个商品算法原理代码编写7. 三数之和算法原理代码编写8. 四数之和算法原理代码编写专题二:滑动窗口1. 长度最小的子数组算法原理代码编写2. 无重复字符的最长字串算法原理代码编写3. 最大连续1的个数 III算法原理代码编写原创 2023-11-23 19:43:10 · 757 阅读 · 0 评论 -
【算法】动态规划题目总结
所以想求跳到第n级台阶有几种方法的话,我们只需知道跳到第 n-1、n-2 和 n-3 台阶时各自有几种方法,然后把它们相加起来即可。观察公式可以看到,如果要求第 i 个泰波那切数的话,我们只需知道前 i-1、i-2、i-3 的值即可。初始化:dp[n-1] = cost[n-1]、dp[n-2] = cost[n-2]状态表示:dp[i] 表示从i位置出发,到达楼顶,此时的最小花费。返回值:min(dp[0], dp[1])PS:计算时需要注意取模。原创 2023-09-16 17:45:54 · 693 阅读 · 0 评论 -
【C++】位运算类题目总结
去统计所有数的每一位比特位上一共有多少个1,统计结果 count 的每一个元素的值一定是 3n,如果把这个只出现一次的数字也给统计进去,那么 count 的每一个元素的值一定是3n 或 3n+1,根据 count 的每一个元素的值去模3,来还原出只那个出现一次的那个数字。1 & 0 = 0 —> 1 + 0 = 1 (当前位的值不进位)0 & 0 = 0 —> 0 + 0 = 0 (当前位的值不进位)0 ^ 0 = 0 —> 0 + 0 = 0 (当前位值为0)0异或任何数得到任何数,相同的数异或得0。原创 2023-04-30 16:34:17 · 812 阅读 · 0 评论 -
【C++】智力题总结
文章目录1、猴子分桃1、猴子分桃题目连接题目描述:老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。后来的小猴子都如此照办。最后剩下的桃子全部留给老猴子。这里有n只小猴子,请你写个程序计算一下在开始时至少有多少个桃子,以及最后老原创 2021-11-12 00:17:02 · 511 阅读 · 0 评论 -
【C++】设计类题目总结
文章目录1、最小栈2、剑指 Offer 59 - II. 队列的最大值3、设计循环队列1、最小栈题目连接题目描述:示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null,-3,null,0,-2]解释:MinStack minStack = new MinStack();minStack.原创 2021-11-20 15:30:11 · 2034 阅读 · 0 评论 -
【C++】日期类题目总结
文章目录一. 需要用到的相关知识1. 日期类实现2. 蔡勒公式二. 日期类题目1、淘宝网店2、一周中的第几天3、美国节日4、计算日期到天数转换一. 需要用到的相关知识1. 日期类实现主要是通过operator++()来计算两个日期之间相差的天数。具体实现看下面这篇博客:日期类模拟实现。2. 蔡勒公式作用是通过输入的年月日算出今天是周几。公式:W=[C/4]-2C+y+[y/4]+[26(m+1)/10]+d-1 (其中[ ]为取整符号)W是所求日期的星期数;如果求得的数大于7,可以直接对原创 2021-11-21 16:37:32 · 1625 阅读 · 0 评论 -
【题目】二叉树题目总结
文章目录一. 前序遍历类二. 中序遍历类三. 后序遍历类四. 层序遍历类1. 二叉树的层序遍历五. 其他类型题目1. 二叉树的最近公共祖先一. 前序遍历类二. 中序遍历类三. 后序遍历类四. 层序遍历类1. 二叉树的层序遍历题目连接题目描述:给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。解题思路:借助队列拿出每一层节点的同时按照从左到右的顺序存入下一层的所有节点,其核心代码下面这条,确保拿出当前层的节点:for(size_t i = q.s原创 2021-11-27 19:19:32 · 1509 阅读 · 0 评论 -
【C++】BFS类型题目总结
文章目录1、墙与门2、图像渲染3、01 矩阵4、岛屿数量1、墙与门题目连接题目描述:解题思路:核心在于用队列把只存门和空房间的位置,把墙排除在外。刚好门的值为0,这样拿出队列里的每一个元素,搜索它的上下左右位置有没有空房间,有的话更新空房间的最近门距离就是该元素的值+1,之后把空房间的位置也入队列,继续拿出队列的下一个元素去更新它周围空房间的值。遍历数组,把所有门的下标入队列。依次拿出队列的元素,检查该元素的上下左右位置是否有空房间,有的话空房间的值改为:刚从队列拿出元素的值 + 1,原创 2021-11-12 01:23:05 · 1482 阅读 · 0 评论 -
【C++】哈希基础知识总结
一. 什么是哈希?1. 哈希概念顺序结构以及平衡树结构中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数:顺序查找时间复杂度为O(N),平衡树中为树的高度O(logN )。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。 如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立映射关系,那么在查找时通过该函数可以很快找到该元素。当向该结构中:插入元素:根原创 2022-03-24 17:13:01 · 2114 阅读 · 1 评论 -
【C++】二叉搜索树模拟实现
文章目录一. 二叉搜索树的概念二. 二叉搜索树的作用三. 二叉搜索树的实现3.1 结构3.2 销毁二叉搜索树(析构函数)3.3 查找3.4 插入3.4.1 代码实现3.4.2 补充说明一. 二叉搜索树的概念二叉搜索树也称为二叉排序树。它或者是一个空树或者是有如下性质的二叉树:左子树上的所有节点小于根节点右子树上的所有节点大于根节点不能存在值相同的节点它的左右子树也分别为二叉搜索树二. 二叉搜索树的作用二叉搜索树也叫二叉排序树,所以他有两个作用,搜索和排序。作用一:搜索注意二原创 2021-11-27 19:58:52 · 1054 阅读 · 0 评论 -
【C++】并查集模拟实现
文章目录一. 什么是并查集?二. 如何实现并查集?1. 并查集基本框架2. 成员函数介绍2.1 接口一:查找元素的根下标2.2 接口二:合并两个元素所在的集合2.3 接口三:获取集合个数3. 并查集的完整实现代码三. 为什么要有并查集?1. 并查集的用途2. 并查集相关题目总结第一题:等式方程的可满足性第二题:计算朋友圈一. 什么是并查集?并查集是一种表示元素与集合之间关系的表示型数据结构。其功能主要有两个:并:合并两个集合。查:查找两个元素是否在同一个集合。下面我们假设一个情景:R公司在A原创 2021-11-20 00:48:13 · 647 阅读 · 0 评论 -
【算法】时间复杂度和空间复杂度
时间复杂度定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间(即一个算法执行所耗费的时间)。原创 2021-03-30 13:42:11 · 467 阅读 · 0 评论 -
【C++】哈夫曼树模拟实现
文章目录一. 什么是哈夫曼树1. 基本术语介绍2. 哈夫曼树的概念3. 哈夫曼树的特点二. 为什么要有哈夫曼树1. 表示哈夫曼编码2. 哈夫曼编码的特点三. 哈夫曼树的构造、编码、译码实现1. 场景说明2. 哈夫曼树基本框架3. 哈夫曼树的成员处理**第一步:初始化哈夫曼树**第二步:构造哈夫曼树Select一. 什么是哈夫曼树1. 基本术语介绍在解释什么是哈夫曼树之前,先介绍三个基本术语:节点的路径长度、节点的权重和树的带权路径长度。节点的路径长度当前节点到根节点路径中边的个数称为该节点的路原创 2021-11-02 13:51:32 · 1193 阅读 · 0 评论 -
【STL】stack、queue、priority_queue模拟实现
文章目录一.一.原创 2021-09-21 22:03:45 · 202 阅读 · 0 评论 -
【数据结构】常见八大排序的实现
文章目录一. 排序相关的概念二. 常见排序算法的实现1. 直接插入排序2. 希尔排序一. 排序相关的概念排序概念所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序的稳定性在未排序前,a下标对应的值和b下标对应的值相等(a < b),排序后如果这两个位置的相等值仍然保持和排序前一样的前后顺序则说明该排序稳定。内部排序数据元素全部放在内存中的完成的排序。外部排序数据元素太多不能同时放在内存中完成排序,只能放到文件或磁盘中(存在文件或磁盘中就不能原创 2021-07-27 18:26:34 · 1155 阅读 · 0 评论 -
【数据结构】二叉树
文章目录一. 树的概念及结构1. 概念2. 特征3. 树的表示法二. .二叉树概念及结构1. 概念2. 特殊的二叉树2.1 完全二叉树2.1 满二叉树一. 树的概念及结构1. 概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。现实生活中的树数据结构中的树2. 特征根节点:没有父节点的节点称为根节点。节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的度为6原创 2021-06-02 00:54:19 · 503 阅读 · 0 评论 -
【数据结构】实现顺序表的增删查改
文章目录一.顺序表介绍二.动态顺序表增删查功能实现三.完整代码四.动态顺序表总结一.顺序表介绍顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改。顺序表可分为静态顺序表和动态顺序表。(1)静态顺序表:使用定长数组存储,适用于确定知道需要存多少数据的场景#define N 100typedef int SeqListDataType;typedef struct SeqList{SLDataType array[N]; // 定长原创 2021-03-01 12:55:28 · 870 阅读 · 0 评论 -
【数据结构】队列的实现
队列的介绍只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特点:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头原创 2021-04-07 16:53:28 · 69 阅读 · 0 评论 -
【数据结构】动态增长栈的实现
栈的介绍一种特殊的线性表,其只允许在固定的一端进行插入(压栈)和删除(出栈)元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守 后进先出LIFO(Last In First Out)的原则。PS:栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小(减少内存碎片)。文件分装对应文件的代码Stack.h#pragma once//需要用到的库函数的头文件#include<stdio.h>#in原创 2021-04-06 20:18:34 · 105 阅读 · 0 评论 -
【数据结构】带头+双向+循环链表增删查改实现
链表功能结构最复杂,一般用在单独存储数据,最实用。文件分装对应文件的代码List.h#pragma once//库函数的声明#include<stdio.h>#include<stdlib.h>//节点的数据类型的重定义typedef int LTDataType;//节点声明typedef struct ListNode{ LTDataType _data; struct ListNode* _next; struct ListNode*原创 2021-04-05 20:30:16 · 106 阅读 · 0 评论 -
【数据结构】单链表增删查改实现
链表功能结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。文件分装对应文件的代码SList.h#pragma once//需要用到的库函数的头文件#include<stdio.h>#include<stdlib.h>//链表数类型的重定义typedef int SLTDateType;//链表节点的声明typedef struct SListNode{ SLTDateType data; struc原创 2021-04-04 09:15:41 · 99 阅读 · 0 评论