
数据结构与算法
喜欢打篮球的普通人
这个作者很懒,什么都没留下…
展开
-
常见排序算法之快速排序
文章目录原创 2022-03-07 23:02:52 · 578 阅读 · 0 评论 -
3.3 atoi字符串转为整数
文章目录1.题目2.代码1.题目题目思路:这题只需要考虑数字和符号的情况,1.若字符串开头是空格,则跳过所有空格,到第一个非空格字符,如果没有,则返回0.2.若第一个非空格字符是符号 +/-,则标记 sign 的真假,这道题还有个局限性,那就是在 c++ 里面,±1 和-+1 都是认可的,都是 -1,而在此题里,则会返回0.若下一个字符不是数字,则返回0,完全不考虑小数点和自然数的情况,不过这样也好,起码省事了不少。4.如果下一个字符是数字,则转为整形存下来,若接下来再有非数字出现,则返原创 2021-12-02 09:22:38 · 477 阅读 · 0 评论 -
2.2.6 旋转链表
文章目录1.题目2.代码1.题目2.代码原创 2021-11-29 19:59:08 · 193 阅读 · 0 评论 -
2.2.5 移除有序链表中的重复项之二
文章目录1.题目2.代码1.题目题目思路:与2.2.4移除有序链表中的重复项不同,由于链表开头可能会有重复项,被删掉的话头指针会改变,而最终却还需要返回链表的头指针。所以需要定义一个新的节点,然后链上原链表。2.代码class Solution{ pubic: ListNode* deleteDuplicates(ListNode* head) { ListNode* dummy(-1); ListNode* pre=dummy;头结点 dummy->n原创 2021-11-29 19:55:22 · 441 阅读 · 0 评论 -
3.2实现strStr()
文章目录1.题目2.代码1.题目[LeetCode] 28. Implement strStr() 实现strStr()函数暴力解法思路:这道题让我们在一个字符串中找另一个字符串第一次出现的位置,那首先要做一些判断,如果子字符串为空,则返回0,如果子字符串长度大于母字符串长度,则返回 -1。然后开始遍历母字符串,这里并不需要遍历整个母字符串,而是遍历到剩下的长度和子字符串相等的位置即可,这样可以提高运算效率。然后对于每一个字符,都遍历一遍子字符串,一个一个字符的对应比较,如果对应位置有不原创 2021-11-15 09:39:28 · 293 阅读 · 0 评论 -
(P7)数据库系统下-四种文件组织方法
文章目录1.数据组织与存取方法2.无序文件组织3.有序记录文件(排序文件Sequential)4.散列文件5.聚簇文件(Clustering file)6. 小结1.数据组织与存取方法数据组织要考虑更新(增、删、改)和检索需求更新将涉及数据存储空间的扩展与回收问题检索将涉及扫描整个数据库的问题、大批量处理数据问题不同的需求要求不同的数据组织方法和存取方法文件组织(File Organization) 指的是数据组织成记录、块和访问结构的方式,包括把记录和块存储在磁盘上的方式,以及记录和块之间原创 2021-11-08 22:09:10 · 3340 阅读 · 0 评论 -
2.2.1两个数字相加
文章目录1.题目要求2.代码1.题目要求题目:2.2.1Add Two Numbers,链接思路(1)这道并不是什么难题,算法很简单,链表的数据类型也不难,就是建立一个新链表,然后把输入的两个链表从头往后撸,每两个相加,添加一个新节点到新链表后面。为了避免两个输入链表同时为空,我们建立一个 dummy 结点,将两个结点相加生成的新结点按顺序加到 dummy 结点之后,由于 dummy 结点本身不能变,所以用一个指针 cur 来指向新链表的最后一个结点。(2)好,可以开始让两个链表相加了,这道题原创 2021-11-03 14:23:00 · 150 阅读 · 0 评论 -
时间和空间复杂度(快速理解)
文章目录1.算法的时间和空间维度2.时间复杂度3.空间复杂度1.算法的时间和空间维度那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。2.时间复杂度我们想要知道一个算法的「时间复杂度」,很多人首先想到的的方法就是把这个算法程序运行一遍,那么它所消耗的时间就自然而然知道了。这种方式可以吗?当转载 2021-11-03 11:08:51 · 184 阅读 · 0 评论 -
2.1.2从重复数组中移除重复元素
文章目录1.题目要求2.代码1.题目要求2.1.2 Remove Duplicates from Sorted Array II80从重复数组中移除重复元素分析:加一个变量记录一下元素出现的次数即可。这题因为是已经排序的数组,所以一个变量即可解决。如果是没有排序的数组,则需要引入一个hashmap来记录出现的次数。2.代码时间复杂度O(n),空间复杂度O(1)class Solution{ public: int removeDuplicates(vector<int&g原创 2021-11-03 10:43:46 · 162 阅读 · 0 评论 -
2.1.3搜索旋转排序数组
文章目录1.题目要求2.代码1.题目要求要求思路2.代码class solution{ public: int search(vector<int>& nums, int target) { int allnum = nums.size(); if (allnum == 0) return -1;原创 2021-10-21 15:06:17 · 146 阅读 · 0 评论 -
2.1.2删除有序数组中的重复项 II
文章目录1.题目要求2.代码1.题目要求链接2.代码class Solution{ public: int removeDuplicates(vector<int>& nums) { // 把<2改为<3就变成了允许重复最多3次 if (nums.size() <= 2) return nums.size(); int index = 2;原创 2021-10-18 22:17:43 · 77 阅读 · 0 评论 -
2.1.1删除有序数组中的重复项
文章目录1.题目要求2.代码1.题目要求26.删除有序数组中的重复项2.代码原创 2021-10-13 23:02:26 · 154 阅读 · 0 评论 -
LeetCode刷题
第2章线性表–2.1.1 Remove Duplicates from Sorted Array–––––––原创 2021-10-13 22:59:00 · 303 阅读 · 0 评论 -
(面试题3)箭指offer之二维数组中的查找
文章目录1.数组和指针2.二维数组中的查找1.数组和指针当我们声明一个数组时,其数组的名字也是一个指针,该指针指向数组的第一个元素。运行下面的代码,请问输出是什么?int GetSize(int data[]){ return sizeof(data);}int _tmain(int argc, _TCHAR* argv[]){ int data1[] = {1,2,3,4,5}; int size1 = sizeof(data1); int* data2 = data1;原创 2021-07-14 07:48:35 · 115 阅读 · 0 评论 -
(面试题2)实现Singleton模式
文章目录原创 2021-07-12 22:29:03 · 159 阅读 · 0 评论 -
(面试题49)剑指offer之把字符串转换成整数
文章目录1.分析代码输出1.分析代码输出问题:分析代码输出class A{private: int n1; int n2;public: A():n2(0), n1(n2+2) {} void Print() { std::cout<<"n1: "<<n1<<", n2: "<<n2<<std::endl; }};int _tmain(int argc, _TCHAR* argv[]){ A a;原创 2021-07-11 22:40:56 · 163 阅读 · 2 评论 -
(面试题1)剑指offer之赋值运算符函数
文章目录1.题目2.答案以及解析1.题目题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数class CMyString{public: CMyString(char* pData = NULL); CmyString(const CmyString& str); ~CmyString(void);private: char* m_pData;};2.答案以及解析CodingInterviewChinese2\01_AssignmentOpera原创 2021-07-06 23:02:30 · 176 阅读 · 0 评论 -
漫画:什么是B+树,B+树层数计算(面试官直呼内行)
文章目录1.什么是B+树2.B+树层数计算(面试官直呼内行)1.什么是B+树一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。一个m阶的B+树具有如下几个特征:1.有k个子树的中间节点包转载 2020-10-29 17:12:04 · 6018 阅读 · 0 评论 -
(2.7)希尔排序
文章目录1.希尔排序(缩小增量法)2.排序过程3.最坏复杂度分析1.希尔排序(缩小增量法)基本思想:分割成若干个较小的子文件,对各个子文件分别进行直接插入排序,当文件达到基本有序时,再对整个文件进行一次直接插入排序。对待排记录序列先作“宏观”调整,再作“微观”调整。“宏观”调整,指的是,“跳跃式”的插入排序。2.排序过程首先将记录序列分成若干子序列,然后分别对每个子序...原创 2020-04-06 20:40:28 · 225 阅读 · 0 评论 -
(2.7)简单插入排序
文章目录1.插入排序的思想2.插入排序的三步曲3.直接插入排序1.插入排序的思想基本思想: 将无序子序列中的一个或几个记录“插入”到有序子序列中,从而增加有序子序列的长度。2.插入排序的三步曲不同的定位方法导致不同的插入算法(1)直接插入排序(基于顺序查找定位)(2)折半插入排序(基于折半查找定位)(3)希尔排序(基于逐趟缩小增量)3.直接插入排序排序过程:整个排序...原创 2020-04-02 22:55:28 · 208 阅读 · 0 评论 -
(2.6)排序基本概念
文章目录1.排序的基本概念2.稳定排序和不稳定排序3.内部排序和外部排序1.排序的基本概念排序定义:将一组数据元素序列重新排列,使得数据元素序列按某个数据项(关键字)有序。排序依据:是依据数据元素的关键字。若关键字是主关键字(关键字值不重复),这无论采用何种排序方法,排出的结果都是唯一的;若关键字是次关键字(关键字值可以重复),则排出的结果可能不唯一;一般情况下,假设含n个记录的...原创 2020-04-01 23:14:07 · 560 阅读 · 0 评论 -
(4.5)树与二叉树之AVL树
文章目录1.2.平衡二叉树的定义1.2.平衡二叉树的定义平衡二叉树或者是一颗空树,或者是具有下列性质的二叉排序数:(1)它的左、右子树都是平衡二叉树(2)并且左、右子树的深度之差不超过1(3)(a)中63节点的深度差计算:4-5=-1...原创 2020-03-30 23:23:26 · 239 阅读 · 0 评论 -
(3.12)递归与分支之分治
文章目录1.算法的总体思想2.分治法的适用条件3.递归复杂度计算1.算法的总体思想分治和递归是互不分离的(1)将要求解的较大规模的问题分割成k个更小规模的子问题(2)对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。(3)将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的...原创 2020-03-05 23:30:14 · 348 阅读 · 0 评论 -
(3.1)递归与分支之递归
文章目录1.递归的定义2.递归的基本思想1.递归的定义递归:子程序(或函数) 直接调用自己或通过一系列调用语句间接调用自己,称为递归。递归是一种描述问题和解决问题的基本方法。eg:函数A中的语句直接调用了函数A本身,这叫做直接递归调用。void A(){ … A(); …}eg:间接递归调用void B(){ ... C(); ...}void ...原创 2020-03-04 21:38:39 · 948 阅读 · 0 评论 -
(4.4)树与二叉树之树与二叉树的相互转化
文章目录1.树的定义2.森林的定义3.森林的存储结构4.森林的存储结构:非重点5.树及森林和二叉树的相互转换1.树的定义具有相同特性的数据元素的集合,当数据元素的个数为0时称之为空树,否则,存在一个唯一的称之为根的数据元素,当数据元素超过1时,其余的节点可以分为m个互不相交的有限集合,每个集合是树根的一个子树,下图,即都是A的子树;树是二叉树的扩展,每个节点有且只有一个双亲,树中有0个或...原创 2020-03-03 23:07:09 · 1990 阅读 · 0 评论 -
(4.3)树与二叉树之推排序:小顶堆和大顶堆
文章目录1.堆的定义2.堆排序3.在堆排序中:如何初始化一个序列来建堆1.堆的定义堆是满足下列性质的数列{r1r_1r1, r2r_2r2, …, r1r_1r1,}:堆适合采用顺序存储结构eg:(1){12, 36, 27, 65, 40, 34, 98, 81, 73, 55, 49} 是小顶堆,why?首先按照将这些数列,按照层次遍历的顺序,构造成完全二叉树;...原创 2020-03-02 23:05:00 · 720 阅读 · 0 评论 -
(4.3)树与二叉树之哈夫曼树
文章目录1.哈夫曼树2.如何构造最优树3.哈夫曼编码1.哈夫曼树结点的路径长度:从根节点到该节点的路径上分支的数目树的路径长度:树中每个节点的路径长度之和树的带权路径长度:树中所有叶子节点的权值和路径长度的乘积的总和假设树中有m个叶子节点,每个叶子节点的权值为Wi,从根到叶子节点的路径长度为Li称树的带权路径长度最短的一类树为“最优树“,即:哈夫曼树有4个结点,权值分别为7, 5...原创 2020-03-01 23:05:35 · 1090 阅读 · 0 评论 -
(4.3)树与二叉树之AVL的变形
文章目录1.二叉平衡树,即AVL树2.构造二叉平衡树的方法3.失衡调整旋转平衡处理1.二叉平衡树,即AVL树定义:首先是一颗二叉排序树,其左右子树都是平衡二叉树,并且左右子树的深度之差不超过1,即为-1,0,1eg:2.构造二叉平衡树的方法在插入过程中,采用平衡旋转技术。eg:依次插入的关键字为5, 4, 2, 8, 6, 93.失衡调整旋转平衡处理(1)单...原创 2020-03-01 21:16:12 · 258 阅读 · 0 评论 -
(4.3)树与二叉树之二叉排序树的变形
文章目录1.二叉树可以变形的种类2.二叉排序树BST1.二叉树可以变形的种类二叉排序树(BST)平衡二叉树(AVL)哈夫曼树及哈夫曼编码堆排序2.二叉排序树BST定义:若根节点的左子树不为空,则左子树上所有节点的值都小于根节点的值;若根节点的右子树不为空,则右子树上所有节点的值都大于根节点的值;左子树和右子树本身就是一颗二叉排序树;与二叉树定义类似,都是递归的定义eg...原创 2020-02-23 22:02:49 · 400 阅读 · 0 评论 -
(4.2)树与二叉树之二叉树的遍历
文章目录1.二叉树遍历的问题提出1.二叉树遍历的问题提出顺着某一条搜索路径巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。...原创 2020-02-21 14:28:13 · 195 阅读 · 0 评论 -
(4.1)树与二叉树之二叉树的存储结构
文章目录1.二叉树的顺序存储结构2.二叉树的链式存储1.二叉树的顺序存储结构用一组地址连续的存储单元,以层序顺序存放二叉树的数据元素,结点的相对位置蕴含着结点之间的关系。完全二叉树的顺序存储 :n个节点的完全二叉树可以存放在1到n的数组中如下图:把编号为i的节点放置在数组的第i个位置,他的左孩子放在2i的位置,他的右孩子放在2i+1的位置一般二叉树的顺序存储把一般的二叉树先补...原创 2020-02-20 20:47:04 · 423 阅读 · 0 评论 -
(4.2)树与二叉树之二叉树的定义与复原
文章目录1.线性结构与树形结构的区别2.二叉树的基本概念和性质1.线性结构与树形结构的区别2.二叉树的基本概念和性质二叉树的递归定义:二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、 互不交的二叉树组成。二叉树的特点:⑴ 每个结点最多只有两棵子树,即不存结点度大于2的结点;⑵ 子树有左右之分,不能颠倒二叉树的五种基本形态:基本概念:(1)节点度:节点所...原创 2020-02-19 09:08:24 · 191 阅读 · 0 评论 -
(6.3)动态规划之动态规划例子-矩阵相乘
文章目录1.问题提出2.关键计算问题3.完全加括号的矩阵连乘积4.矩阵连乘问题1.问题提出软件行业中客户总是在变更需求银行对我们公司开发的乘法模块还不满意。他们的真实想法并不是实现两个矩阵的乘法,而是是能一次够实现多个矩阵按照算法运算法则的乘法,因此要求我们进一步改进我们的系统,实现多个矩阵的连乘功能,并且需要看到我们设计的程序能够满足他们的运行效率要求时才付二期款。2.关键计算问题...原创 2020-02-05 20:59:11 · 758 阅读 · 0 评论 -
(6.2)动态规划之动态规划理论
文章目录1.动态规划的起源2.动态规划的应用领域3.算法的总体思想4.动态规划的关键思想1.动态规划的起源动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。 20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出...原创 2020-02-04 23:12:41 · 667 阅读 · 0 评论 -
(2.1)查找之查找基本概念
文章目录1.基本概念2.常见的查找算法1.基本概念查找表是由同类型的数据元素(或记录)构成的集合。对查找表基本操作(即:增删改查)(1)查询某个数据元素是否在查找表中;(2)检索某个数据元素的各种属性;(3)在查找表中插入一个数据元素;(4)从查找表中删去某个数据元素。查找表分类静态查找表仅作查询和检索操作的查找表。动态查找表(1)查询”结果“不在查找表...原创 2020-02-04 22:41:59 · 195 阅读 · 0 评论 -
常见数据结构与算法学习目录
目录链接–(2.5)查找之哈希查找https://blog.csdn.net/u011436427/article/details/104080615from https://www.icourse163.org/learn/UESTC-1002532005?tid=1206781208#/learn/content?type=detail&id=121...原创 2020-02-01 22:27:57 · 312 阅读 · 0 评论 -
(2.5)查找之哈希查找的冲突处理解决办法
文章目录1.冲突处理2.常见的冲突处理的解决办法3.开放地址法1.冲突处理冲突的含义:(1)是指由关键字得到的Hash地址上已有其他记录。(2)好的哈希函数可以减少冲突,但很难避免冲突。(3)eg:除留取余,H(key)=key%p;key的值是任意的,H(key)的值为[0,p-1]冲突处理的方法:为出现哈希地址冲突的关键字寻找下一个哈希地址。2.常见的冲突处理的解...原创 2020-01-31 22:39:43 · 1262 阅读 · 0 评论 -
(2.5)查找之哈希查找
文章目录1.哈希函数的定义3.哈希表1.哈希函数的定义一般情况下,需在关键字与记录在表中的存储位置之间建立一个函数关系,以 H(key) 作为关键字为key 的记录在表中的位置,通常称这个函数 h(key) 为哈希函数。哈希函数的特点(1)哈希函数是一个映象,即: 将关键字的集合映射到某个地址集合上, 它的设置很灵活,只要这个地址集合的大小不超出允许范围即可;(2) 由于哈希函...原创 2020-01-24 15:19:41 · 648 阅读 · 0 评论 -
二叉树打印
文章目录1.二叉树按层遍历2.二叉树的序列化与反序列化1.二叉树按层遍历方法(1)针对二叉树的宽度优先遍历(2)宽度优先遍历常使用队列结构(3)面试中,该类题目要求:对换行有所要求是图的宽度优先搜索(一层一层,从左到右)的应用,结果是:1,2,3,4,5,6,7,8eg:题目要求:给定一颗二叉树的头节点head,请按照现在大家看到的这种格式打印要求打印成:12 34 ...原创 2020-01-19 21:42:48 · 876 阅读 · 0 评论 -
bat算法常见面试题
二叉树打印–from https://www.bilibili.com/video/av54147410?p=1––––––––––––––––––原创 2020-01-19 19:50:07 · 793 阅读 · 0 评论