- 博客(39)
- 收藏
- 关注
原创 整数和(推公式)
这道题是一道简单题,但是如果我们正常的去暴力,时间复杂度是On的,对于这道题是可以过掉的,但一旦扩大数据范围,我们就无法通过暴力去得到正确的答案,这篇题解希望通过一道简单的例题学会一种新的思想——推公式。
2024-04-08 23:42:16 301
原创 最值查找max,min及类似函数用法与说明
本篇介绍了在算法竞赛中最为常用的关于最值查找的部分函数。max() ,min(), max_element(), min_element(), nth_element()的具体用法
2024-01-08 08:34:00 521
原创 sort实现自定义排序方法详解
sort 默认使用小于号 < 进行排序,一般进行的都是升序排序,通过自定义比较规则,可以传入第三个参数,可以是函数或lambda表达式。使用函数实现自定义排序int arr[N];//待排序数组bool cmp(const int &u, const int &v)//自定义排序函数int main()int n;cin >> n;//数组长度i
2024-01-07 18:59:31 938
原创 C++STL(7) unordered_map容器汇总
提供了高效的插入、删除和查找操作,平均情况下的复杂度为常数时间O(1)。然而,它的元素顺序是不确定的,这在某些情况下可能是一个限制。因此,在某些情况下,哈希表的性能可能更好,但它可能会消耗更多的内存来存储哈希函数和桶结构。哈希表是一种使用哈希函数将键映射到存储桶(bucket)的数据结构,以实现快速的插入、删除和查找操作。使用键的哈希函数来确定元素在哈希表中的位置。如果您需要按照键的顺序进行迭代,或者在有序的键集合上进行操作,可以选择。如果您需要快速的查找、插入和删除操作,并且元素的顺序不重要,可以选择。
2023-11-11 23:46:09 510
原创 C++STL(6) map容器汇总
std::map是C++标准库中的关联容器之一,它提供了一种键-值对的存储方式,其中每个键都是唯一的。std::map基于红黑树的数据结构实现,具有以下特点:std::map中的每个键都是唯一的,同一个键只能对应一个值。这使得std::map非常适用于需要通过键来查找和访问值的场景。std::map中的键按照严格弱序进行排序,这意味着它们按照升序排列。默认情况下,std::map使用键的比较操作符来进行排序,但也可以通过自定义比较函数来实现自定义排序。快速查找:由于std::map。
2023-11-10 23:20:05 324
原创 C++STL(5) set容器汇总
std::set作为C++标准库中的容器之一,具有以下优点和缺点:优点:std::set中的元素是唯一的,每个元素只能出现一次。这使得std::set非常适用于需要存储唯一元素的情况。std::set中的元素按照特定的排序规则自动进行排序。默认情况下,元素按照升序进行排序,但也可以通过自定义比较函数来实现自定义排序。std::set中的元素是基于红黑树等数据结构实现的,这使得在集合中进行查找操作非常高效。find函数的时间复杂度为O(logN),其中N是集合中的元素数量。std::set。
2023-11-10 22:59:58 70
原创 C++STL(4) stack容器汇总
如果您在提到"stack库"指的是C++标准库中的std::stackstd::stack是C++标准库中提供的一个容器适配器(container adapter)。它基于其他容器(默认使用std::deque)实现了栈的功能,提供了一组简单且易于使用的栈操作接口。std::stack继承自底层容器,并通过封装底层容器的操作,提供了栈特有的行为。以下是std::stack的一些重要特性和操作:std::stack提供了入栈(push())和出栈(pop())操作。
2023-11-09 23:12:33 42
原创 C++STL(3) queue容器汇总
当谈论C++中的队列(queue)容器时,队列是一种常见的容器,遵循先进先出(First-In-First-Out,FIFO)的原则。C++的标准模板库(STL)提供了一个名为queue的模板类,用于实现队列的功能。以下是关于C++ STL队列的一些特点和函数:包含头文件:要使用队列,需要包含头文件。定义队列:可以使用queue模板类来定义队列对象。将创建一个名为myQueue的整数类型队列。元素入队:使用push()函数将元素推入队列的末尾。将整数10推入队列myQueue的末尾。
2023-11-09 22:55:42 51
原创 C++STL(2) list容器汇总
std::list是C++标准库提供的双向链表容器。与不同,std::list不是基于连续内存存储元素的,而是通过指针链接各个元素。这使得std::list在插入和删除元素时具有更好的性能,但在随机访问元素时性能较差。下面是std::list双向链表std::list的元素以双向链表的形式存储,每个元素都包含指向前一个元素和后一个元素的指针。插入和删除:由于链表的特性,std::list在插入和删除元素时效率很高,不需要移动其他元素。插入和删除操作的时间复杂度为O(1)。无需重新分配内存....
2023-11-08 17:00:40 31
原创 C++ STL 之 vector容器汇总
是C++标准库中的一个容器,它提供了动态数组的功能。它是一个模板类,可以存储不同类型的元素,并且可以根据需要自动调整大小。是C++中最常用的容器之一,因为它具有灵活性、高效性和易用性。下面是一些关于头文件和命名空间:使用需要包含头文件,并使用std命名空间。和。声明和初始化:可以使用模板类声明一个向量,并通过不同的方式进行初始化。// 声明一个整型向量// 声明一个具有5个元素的双精度浮点型向量// 声明并初始化一个字符串向量```添加和访问元素:可以使用。
2023-11-08 01:46:27 305
原创 从零开始学数据结构与算法(四) :二叉树 (二叉树的性质,遍历,构建,哈夫曼算法及相互之间的转换)
二叉树的基本知识点,包括了树的概念,树的术语,树的遍历方法,二叉树的各种实现,二叉树与普通树,和森林的相互转换,以及哈夫曼树,哈夫曼编码。
2023-10-24 11:14:02 159 1
原创 栈出栈序列问题的探究与思考(卡特兰数)
卡特兰数是一种数学上的数列,由法国数学家卡特兰(Catalan)在1838年首次提出。它的计算方式是:C0 = 1,Cn+1 = (2(2n+1)/(n+2))*Cn,其中n>=0。这个数列在组合数学、计算机科学、统计学等领域有广泛的应用。卡特兰数是一个非常有用的数学工具,能够用于解决许多问题,其中之一就是栈的问题。在使用栈时,常常需要考虑栈的各种操作的顺序,以确保栈操作的正确性。而卡特兰数正好可以帮助我们计算各种可能的栈操作顺序的数量,从而简化了栈操作的分析和设计。
2023-10-21 12:47:08 423
原创 算法基础模板——数学知识——组合数计算小结
组合数的计算在概率论问题有着广泛的运用,作为数学知识重要的一部分,我抽出一部分时间专门做出了整理,我相信在不断的整理和复习中,我的专业知识会更加熟练。
2023-10-21 02:44:29 41
原创 从零开始学数据结构与算法(三) :队列
队列是一种线性数据结构,具有先进先出(FIFO)的特点,即首先进入队列的元素首先被处理,最后进入队列的元素最后被处理。队列通常包含两个基本操作:入队(enqueue)和出队(dequeue)。入队操作将元素添加到队列的尾部,出队操作则将队列头部的元素删除并返回其值。队列常用于处理需要按顺序执行的任务,例如打印作业、消息传递等场景。ADT QueueDataModel队列中元素具有先进先出特性,相邻元素具有前驱和后继关系OperationInitQueue输入:无功能:队列的初始化。
2023-10-07 22:21:10 65
原创 从零开始学数据结构与算法(二) : 栈
栈(stack)是限定在表的一端进行插入和删除的线性表,允许插入和删除的一段叫做栈顶,另外一段称为栈底,不含任何数据元素的栈称为空栈。任何时刻出栈的元素都只能是栈顶元素,即最后入栈者最先出栈,所以栈中元素除了线性关系外,还具有后进后出的特性。虽然对插入和删除操作的位置限制减少了栈操作的灵活性,但也同时使得栈的操作更有效更容易的实现。ADT StackDataModel栈中元素具有后进后出特性,相邻元素具有前驱和后继关系OpertionInitStack输入:无功能:栈的初始化。
2023-10-05 17:39:45 64
原创 从零开始学数据结构与算法(一):线性表 (万字总结!!!!)
线性表(List)是一种常见的数据结构,它是由一组数据元素组成的有序序列。线性表中的元素按照线性的顺序排列,可以通过索引访问和操作。让我们从零开始,一起敲开数据结构的大门吧!!!!
2023-09-12 00:31:12 86
原创 十大排序之归并排序
1945年,约翰·冯·诺依曼(John von Neumann)发明了归并排序,这是典型的分治算法的应用.归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为。
2023-08-19 00:20:15 37
原创 十大排序之快速排序
快速排序(Quick Sort)是一种高效的排序算法,它采用分治的策略来将一个数组分成两个子数组,然后递归地对子数组进行排序,最终将整个数组排序完成。
2023-08-19 00:19:07 64
原创 十大排序之希尔排序
希尔排序,也称递减增量排序算法,1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素,希尔排序是非稳定排序算法。
2023-08-19 00:16:41 26
原创 十大排序之插入排序
插入排序的代码实现虽然没有选择排序和冒泡排序那么简单粗暴,但它的原理应该是最容易理解的了,因为插入排序在我们的日常生后中就经常用到,他的排序方式就向我们打扑克时抽牌插牌的过程。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
2023-08-19 00:15:29 24
原创 十大排序之冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序不符合我们的要求,就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为最大或是最小的值会像泡泡一样从水底冒到水面,最终成为有序的数列。
2023-08-19 00:13:59 26
原创 十大排序之选择排序
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。**原理:**首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
2023-08-19 00:11:42 23
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人