![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 66
蓝猫骑士
这个作者很懒,什么都没留下…
展开
-
关于 贪心 算法
此例题来自洛谷 P2859 [USACO06FEB]Stall Reservations S;每头奶牛的开始与结束时间 可以看成一个线段;求解当下线段重合部分的最大值;所谓贪心: 就是只管当下的最优解。原创 2022-10-14 00:20:25 · 88 阅读 · 0 评论 -
引用 内联 auto
【代码】引用 内联 auto。原创 2022-09-20 22:22:05 · 96 阅读 · 0 评论 -
【数据结构】快速排序
显然 这种交换排序的主要特点就是将值较大的记录向序列的尾部移动,值较小的记录向序列的前部移动;(升序,降序反之)。先分析单趟的排序;单躺的冒泡排序是将 最大的值放到数组的最后面,之后就不考虑这个最大的数了,而快速排序的单趟是将准备好的 key 值放到 适当的位置(排好序的位置);下面先来分析一下快速排序的单趟排序:用两个参数 left 与 right ,分别从数组的两边出发,right 找比 key 值小的,找到之后停下,left 找比 key 值大的,找到之后也停下,互换两个数的,循环直到left ==原创 2022-09-02 20:52:57 · 270 阅读 · 0 评论 -
【数据结构】希尔排序
直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。将相同颜色的数字进行排序;然后对gap 进行修改,再重复进行预排序;插入排序 的时间复杂度 最大为O(n^2),最好为 O(n);分为两步:1.预排序 : 使数组接近有序 2. 直接插入排序;希尔排序的思想就是插入排序;...原创 2022-08-31 22:24:13 · 347 阅读 · 2 评论 -
【数据结构算法】动态规划之【单序列问题】
动态规划常常适用于有重叠子问题和最优子结构性质的问题,并且记录所有子问题的结果,因此动态规划方法所耗时间往往远少于朴素解法。动态规划有自底向上和自顶向下两种解决问题的方式。自顶向下即记忆化递归,自底向上就是递推。使用动态规划解决的问题有个明显的特点,一旦一个子问题的求解得到结果,以后的计算过程就不会修改它,这样的特点叫做无后效性,求解问题的过程形成了一张有向无环图。动态规划只解决每个子问题一次,具有天然剪枝的功能,从而减少计算量。...原创 2022-08-25 18:12:49 · 348 阅读 · 3 评论 -
【数据结构算法】小结
寂寞如雪:首先就是一个截取的问题;怎么截取可以使得获得的能量最大;这里设计到一个动态规划中的转移思想;2.转移等下再说;先来分析一下如何对数据进行处理,准备一个数组,将 每一段 1 的个数 存起来;例如 :111001110001111; 数组中这样存:3 0 3 0 4;再对这个数组进行平方处理,偶数位赋予负值;为了方便偶数维赋予赋值 可以 在数组开头加上一个零 像这样: 0 90 90 16;这时只需要 当 i % 4 == 3 的时候乘于-13.这一步就是动态规划的了;求连续区间的最大值问题原创 2022-08-23 13:01:22 · 473 阅读 · 3 评论 -
【数据结构】二叉树的递归思想
所谓二叉树遍历(Traversal)是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。 遍历是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。二叉树的遍历有 四种 方法,分别是 前序遍历 中序遍历 后续遍历 以及 层序遍历;1. 前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。 ( 根 左子树 右子树 )2. 中序遍历(Inorder Traversal).原创 2022-08-15 16:42:28 · 357 阅读 · 6 评论 -
【数据结构】二叉树中 堆的实现方法
堆:有一组集合 的元素按照完全二叉树的顺序储存方式存储到一个一维数组中,根据存储的顺序不同分为小堆与大堆。原创 2022-08-08 23:01:35 · 349 阅读 · 27 评论 -
【数据结构】栈和队列
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来),。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。按图示来理解就是:队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)(头删头插)入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。..原创 2022-08-07 18:33:46 · 772 阅读 · 13 评论 -
【数据结构】链表OJ题
假想「乌龟」和「兔子」在链表上移动,「兔子」跑得快,「乌龟」跑得慢。当「乌龟」和「兔子」从链表上的同一个节点开始移动时,如果该链表中没有环,那么「兔子」将一直处于「乌龟」的前方;如果该链表中有环,那么「兔子」会先于「乌龟」进入环,并且一直在环内移动。等到「乌龟」进入环时,由于「兔子」的速度快,它一定会在某个时刻与乌龟相遇,即套了「乌龟」若干圈。这样一来,如果在移动的过程中,快指针反过来追上慢指针,就说明该链表为环形链表。本文的内容与链表有关,难度是递进的,前面几题 很简单 我就简单的一笔带过;...原创 2022-08-05 17:26:00 · 351 阅读 · 7 评论 -
单链表增删查找的实现
对比以上两种插入我们可以发现尾插的效率并没有头插的效率高。尾插需要遍历链表,时间复杂度尾O(N),而头插的时间复杂度为O(1);首先,我们想要进行插入就意味着我们先构造一个动态申请节点的函数;概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表。3.从堆上申请的空间,是按照一定的策略分配的,两次申请的空间可能连续,也可能不连续。一个一个节点用指针连在一起就构成了我们的单链表;1.从图中可以看出,链式结构在逻辑上是连续的,但是在物理上不一定是连续的;...原创 2022-07-31 23:20:40 · 120 阅读 · 4 评论 -
顺序表的实现
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改(采用定长数组的形式进行存储)和(使用动态开辟的数组进行存储)静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以下面我们实现动态顺序表。...原创 2022-07-29 18:32:17 · 1778 阅读 · 10 评论