![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法问题实战策略
文章平均质量分 62
三元湖有大锦鲤
我吃吃吃。
展开
-
树的实现与遍历
引言数据间存在上下级关系或包含关系时,就会产生层级结构。例如,8-4-2-1的比赛对阵表,公司和学校的结构图,网点商品的分类标准。表示层级结构数据的数据结构就是树tree。最初提出树的概念是为了表示现实世界的概念,不过,树也可以用作检索型数据结构,满足特定条件的树结构比数组或链更快。基本定义与术语:树的组成要素:树是存有数据的节点node和边edge连接而成的数据结构,节点之间存在上下级关系。相互连接的节点中,上级节点称为父节点parent,下级节点称为子节点child。父节点相同的两节点称为兄弟节原创 2022-05-02 16:11:37 · 535 阅读 · 0 评论 -
队列、栈以及双端队列
引言队列、栈和双端队列抽象程度更高,更能反应现实问题的情况,可以使程序员站在更高的角度思考、解决问题。栈、队列和双端队列:共同点:都可以保存排列成行或列的数据。这些数据结构中存入数据的操作都是push,取出数据的操作都是pop,push和pop都是在O(1)时间里完成。不同点:(1)队列queue:从一端存入数据,另一端取出数据。先存入的先被取出,先进先出FIFO(First in first out)。例如生活中的队伍,是这种类型。(2)栈stack:只能从一段存入和取出数据。最后存入的先被取原创 2022-05-02 14:41:20 · 858 阅读 · 0 评论 -
线性数据结构 数组 动态数组 链表
引言线性数据结构主要是数组,还有可以优化数组的动态数组和链表。动态数组:数组在声明是需要指定长度,并且不能存储超过此长度的元素。为了解决这个问题设计的数据结构就是动态数组,其长度能够根据元素个数变化。动态数组不是数组,而是依据数组设计出来的一种数据结构,其继承了数组的以下特性:(1)元素保存于连续的内存空间。(2)返回或更改指定位置的元素,可以在O(1)时间内完成。此外,动态数组还有数组不具备的特点:(1)可以进行变更数组长度的resize()运算,此运算需要耗费数组长度N的运算时间。原创 2022-04-29 11:05:59 · 179 阅读 · 0 评论 -
部分和 前缀和 二维前缀和
引言假设给你一个的存有成绩的数组scores[],要求从第a个到第b个的平均成绩。一个方法是将从第a个到第b个数据累加后除b-a+1即可,这种方法的循环次数最大能达到O(N),如果计算一次平均值就足够了,如果计算多次平均值,就需要对这个方法进行优化。具体的优化方法是定义一个数组psum[],psum[i] 为从第一个到第i个的累加,这样scores[a]到scores[b]之间的和即为psum[b]-psum[a-1]。计算部分和://求给定向量a的部分和 vector<int> pa原创 2022-04-28 17:09:27 · 300 阅读 · 0 评论 -
位掩码 位运算 集合
引言利用CPU使用二进制表示和处理数据这种特性,将整数的二进制表示法用作数据结构的方法就是位掩码(bitmask),严格来说,位掩码算不上数据结构,但可以作为一个很有用的工具。使用位掩码的代码的优点:(1)更快的执行速度。(2)更简洁的代码。(3)更少的内存占用量。(4)用数组替代关联数组。术语定义:计算机将所有的整数变量表示为二进制的形式,此时,一个二进制位就称为位bit,位只能取0或1,是计算机表示数据的基础。位运算符:(1)位单位进行的AND运算按照位比较输入的两个整数,两整数原创 2022-04-28 15:59:29 · 510 阅读 · 0 评论 -
C++ 算法 数据结构 图的表示方式及定义
引言Graph–现实世界或抽象概念之间的连接关系,例如:(1)城市交通网(2)人际相识关系(3)网络连接关系图的定义:图G(V,E)是某种数据或概念的顶点vertex集合V和连接这些顶点的边edge集合E组成的数据结构。图由顶点之间的关系和边之间的关系定义,顶点的位置或边的顺序不属于图的定义范围。图的类型:最常见的一个类型是有向图,即边带着方向属性,有向图中有u、v两个顶点的边,就可以说是从u到v一条边和从v到u一条边,这种类型的图可以表示单向的关系,例如人与人之间的单恋关系,道路的单行线。边不原创 2022-04-27 12:01:51 · 2486 阅读 · 0 评论