算法详解-双指针算法的魅力-一种简单而高效的编程思想
双指针简介 双指针算法是一种通过设置两个指针不断进行单向移动来解决问题的算法。 它包含两种形式:快慢指针和对撞指针。 快慢指针是一种设置步长不同的两个指针,用于解决链表中的问题,如判断是否有环,找到中间节点等。 对撞指针是一种设置在序列两端...
双指针简介 双指针算法是一种通过设置两个指针不断进行单向移动来解决问题的算法。 它包含两种形式:快慢指针和对撞指针。 快慢指针是一种设置步长不同的两个指针,用于解决链表中的问题,如判断是否有环,找到中间节点等。 对撞指针是一种设置在序列两端...
目录 1.6 快速排序 1. 算法步骤 2. 动图演示 3.代码实现 1.7 堆排序 1. 算法步骤 2. 动图演示 3. 代码实现 1.8 计数排序 1. 计数排序的特征 2. 动图演示 3.代码实现 1.9 桶排...
目录 1.1冒泡排序 1. 算法步骤 3.什么时候最快 4. 什么时候最慢 5.代码实现 1.2选择排序 1. 算法步骤 2. 动图演示 3.代码实现 1.3 插入排序 1. 算法步骤 2. 动图演示 3. 算法实现 1.4 希尔排序...
迪杰斯特拉算法介绍 迪杰斯特拉(dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 基本思想 通过dijkstra计算图g...
一:深度优先搜索dfs 我们以图为例,图是由一些小圆点(顶点)和连接这些小圆点的直线(边)组成。例如: 现在我们想要遍历这个图,我们可以从1号顶点开始,遍历就是将图中每一个顶点都访问一次。使用深度优先搜索会得到这么一个结果 他们身上标注的数...
洗牌算法问题为: 有一个大小为 100 的数组,里面的元素是从 1 到 100 按顺序排列,怎样随机的从里面选择 1 个数? 最简单的方法是用rand()系统自动生成一个1-100的数,然后去数组找对应的位置即可。 进一步,问题扩展为: 有...
算法的时间复杂度和空间复杂度 算法效率 时间复杂度 空间复杂度 常见的时间复杂度以及复杂度的oj练习 算法效率 算法的复杂度 算法在编写成可执行程序后,运行时需耗费时间资源和空间资源(内存)资源。因此衡量一个算法的好坏,一般是从时间和空间两...
一、排序的概述 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 八大排序都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排序算法,他们之间关系如下: 什么是排序的稳定性? 稳定性:假定在...
一、两个数是否相同 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 基本思路: 对二叉树进行遍历,判断每一个结点的结构和数值是否相同,不同直接返...
一、二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 基本思路: 我们在二叉树的基本操作中已经实现了一次二叉树的层序遍历,但我们是直接进行打印,这里我们想把二叉树的每一层的...