上一页 1 2 3 4 5 6 7 8 ··· 18 下一页
摘要: 桶排序 前面的快速排序、归并排序、堆排序等都是属于“基于比较的排序算法”,它们通过比较元素间的大小来实现排序。此类排序算法的时间复杂度无法超越O(nlogn)。下面介绍几种“非比较排序算法”,它们的时间复杂度可以达到线性阶。 桶排序(bucket sort)是分治策略的一个典型应用。它通过设置一些具 阅读全文
posted @ 2024-10-18 10:13 风陵南 阅读(154) 评论(0) 推荐(0)
摘要: 堆排序 堆排序(heap sort)是一种基于堆数据结构实现的高效排序算法。我们可以利用已经学过的“建堆操作”和“元素出堆操作”实现堆排序。 输入数组并建立小顶堆,此时最小元素位于堆顶。 不断执行出堆操作,依次记录出堆元素,即可得到从小到大排序的序列。 以上方法虽然可行,但需借助一个额外数组来保存弹 阅读全文
posted @ 2024-10-17 10:43 风陵南 阅读(227) 评论(0) 推荐(0)
摘要: 求最大公因数 求两数的最大公因数通常的做法是对两个数因式分解,找出共同的素数,然后求出最大公因数(GCD)。但是当数字越大时,因式分解就越困难,此时,使用欧几里得算法就能高效求出其最大公因数。 欧几里得算法 欧几里得算法(又称辗转相除法)用于计算两个数的最大公因数,被称为是世界上最古老的算法。 基本 阅读全文
posted @ 2024-10-16 14:17 风陵南 阅读(776) 评论(0) 推荐(0)
摘要: 删除字符串中的所有空格与换行 使用头文件中的remove函数,注意:std::remove 不会改变容器的大小,它只是将元素移动到容器的末尾。因此,我们需要调用 erase 来实际从字符串中删除这些元素。 使用 std::remove 算法,它重排元素,使得要删除的元素(在这里是空格和换行符)被放在 阅读全文
posted @ 2024-10-11 15:56 风陵南 阅读(1526) 评论(0) 推荐(0)
摘要: 归并排序 归并排序(merge sort)是一种基于分治策略的排序算法,包含下图所示的“划分”和“合并”阶段。 划分阶段:通过递归不断地将数组从中点处分开,将长数组的排序问题转换为短数组的排序问题。 合并阶段:当子数组长度为1时终止划分,开始合并,持续地讲左右两个较短的有序数组合并为一个较长的有序数 阅读全文
posted @ 2024-09-27 13:35 风陵南 阅读(461) 评论(0) 推荐(0)
摘要: 快速排序 快速排序(quick sort)是一种基于分治策略的排序算法,运行高效,应用广泛。 快速排序的核心操作是“哨兵划分”,其目标是::选择数组中的某个元素作为“基准数”,将所有小于基准数的元素移到其左侧,而大于基准数的元素移到其右侧。具体流程如下: 选取数组最左端元素作为基准数,初始化两个指针 阅读全文
posted @ 2024-09-26 16:33 风陵南 阅读(250) 评论(0) 推荐(0)
摘要: 简单排序算法 时间复杂度均为O(n2) 选择排序 选择排序(selection sort)的工作原理非常简单:开启一个循环,每轮从未排序区间选择最小的元素,将其放到已排序的区间的末尾。 算法流程 设数组长度为n,选择排序的算法流程如下。 初识状态下,所有元素未排序,即未排序(索引)区间为[1, n- 阅读全文
posted @ 2024-09-26 10:35 风陵南 阅读(423) 评论(0) 推荐(0)
摘要: DLL介绍 DLL(动态链接库,Dynamic Link Library)是一种可执行文件,它包含可以在其他程序中调用的函数和数据。他是Windows操作系统中的一个重要概念,用于代码共享和模块化。 特点 代码共享:多个程序可以同时使用同一个DLL文件,而不需要将其代码编译到每个程序中。这样可以节省 阅读全文
posted @ 2024-09-20 10:54 风陵南 阅读(4433) 评论(2) 推荐(3)
摘要: 哈希优化策略 在算法题中,我们通常通过线性查找替换为哈希查找来降低算法的时间复杂度。我们借助一个算法题来加深理解。 Question 给定一个整数数组nums和一个目标元素target,请在数组中搜索“和”为target的两个元素,并返回他们的数组索引。返回任意一个即可。 线性查找: 以时间换空间 阅读全文
posted @ 2024-09-17 20:26 风陵南 阅读(155) 评论(0) 推荐(0)
摘要: 二分查找插入点 二分查找不仅可用于搜索目标元素,还可以解决许多变种问题,比如搜索目标元素的插入位置。 无重复元素情况 Question 给定一个长度为n的有序数组nums和一个元素target,数组不存在重复元素。现将target插入数组nums中,并保持其有序性。若数组中已存在元素target,则 阅读全文
posted @ 2024-09-12 13:56 风陵南 阅读(159) 评论(0) 推荐(0)
摘要: 二分查找 二分查找(binary search)是一种基于分治策略的高效搜索算法。它利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。 Qustion: 给定一个长度为n的数组nums,元素按从小到大的顺序排列且不重复。请查找并返回元素target在该数组中的索引。若数组不 阅读全文
posted @ 2024-09-12 09:57 风陵南 阅读(328) 评论(0) 推荐(0)
摘要: 图的实现 基于邻接矩阵的实现 给定一个顶点数量为n的无向图: 初始化:传入n个顶点,初始化长度为n的顶点列表vertices,使用O(n)时间;初始化 n * n 大小的邻接矩阵adjMat,使用O(n2)时间。 添加或删除边:直接在邻接矩阵中修改指定的边即可,使用O(1)时间。而由于是无向图,因此 阅读全文
posted @ 2024-09-11 14:51 风陵南 阅读(470) 评论(0) 推荐(0)
摘要: 图 图(graph)是一种非线性数据结构,由顶点(vertex)和边(edge)组成。我们可以将图G抽象地表示为一组顶点V和一组边E的集合。以下示例展示了一个包含5个顶点和7条边的图。 如果将顶点看做节点,将边看做连接各个节点的引用(指针),我们就可以将图看作一种从链表拓展而来的数据结构。如下图,相 阅读全文
posted @ 2024-09-09 15:02 风陵南 阅读(84) 评论(0) 推荐(0)
摘要: 堆 堆(heap)是一种满足特定条件的完全二叉树,主要分为两种类型: 小顶堆(min heap):任意节点的值 ≤ 其子节点的值 大顶堆(max heap):任意节点的值 ≥ 其子节点的值 堆作为完全二叉树的一个特例,具有以下特性: 最底层节点靠左填充,其他层的节点都被填满 我们将二叉树的根节点称为 阅读全文
posted @ 2024-09-09 10:47 风陵南 阅读(377) 评论(0) 推荐(0)
摘要: map/multimap容器 Map的特性是,所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一个元素被视为键值,第二个元素被视为实值,map不允许两个元素有相同的键值。 multimap和map的操作类似,唯一区别是multimap的键值可以重复。 阅读全文
posted @ 2024-09-06 10:16 风陵南 阅读(35) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 ··· 18 下一页