![](https://img-blog.csdnimg.cn/74614e119e1d48279c9eeff7aa43b49e.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 57
常用且实用的算法
昊月光华
大道三千,以代码能证我的道吗?
展开
-
Tire树实现
Trie树,又称字典树或者前缀树,是一种特殊的树形数据结构。它的目的是为了解决字符串快速查找的问题,可以高效地进行单词的插入、查询和删除等操作。原创 2023-10-10 13:43:27 · 87 阅读 · 0 评论 -
C/C++中的STL
首先,vector是一个变长数组,元素属于顺序存储.数组扩容,默认以倍增的思想进行扩容.在算法中,开辟动态内存的次数会极大影响算法的运算时间,这个时间主要是os为程序申请内存时的的内核态和用户态的堆栈切换导致的.所以能一次性分配完就不要频繁分配内存.当向向量添加元素时,如果发现 size == cap(容量已满),就调用 expand() 方法进行扩容,然后再添加元素.原创 2023-10-10 13:41:26 · 89 阅读 · 0 评论 -
手写堆与堆的常见操作
堆是一种特殊的树形数据结构,它满足以下两个条件:堆是一个完全二叉树:即除了最后一层外,每一层都是满的,且最后一层上的节点都集中在左侧。堆中每个节点的值都要大于等于(或小于等于)其子节点的值:如果每个节点的值都大于等于其子节点的值,我们称之为“大根堆”;如果每个节点的值都小于等于其子节点的值,则称之为“小根堆”。堆通常用来实现优先队列,通过维护堆顶元素的位置和值,可以快速取出当前队列中的最小(或最大)值,并且支持插入、删除、修改操作。堆排序算法就是利用堆这种数据结构来实现的。原创 2023-10-10 12:16:50 · 129 阅读 · 0 评论 -
静态链表C/C++
与常见的数据结构的链表不同,想想常见的链表,每次新增数据都要重新开辟内存,这对有时间限制的算法程序来说每次插入新的数据就malloc是绝对会TLE的(除非从一开始就新开辟连续的堆空间当然这种情况下就不是动态链表了).所谓静态链表,指的是:静态链表是一种使用数组来实现链表的数据结构。它是在数组的基础上,通过将每个节点中的指针指向它在数组中的位置来表示链表中的连接关系。原创 2023-10-10 12:12:33 · 153 阅读 · 0 评论 -
基于动态规划的0-1背包问题学习
动态规划是一种解决多阶段决策过程最优化问题的数学方法。其基本思想是将问题分解成若干个子问题,通过求解子问题的最优解来推导出原问题的最优解。具体而言,动态规划方法可以分为两个步骤:定义状态:将原问题转化为某一阶段的子问题,并记录下该子问题的最优解。状态转移方程:通过对每个子问题的最优解进行组合,得到原问题的最优解。在定义状态时,需要明确每个状态所代表的含义和与其他状态之间的关系;在构造状态转移方程时,需要根据前一个状态推出当前状态,从而不断递推到最终状态,得到最优解。原创 2023-10-10 12:11:48 · 106 阅读 · 0 评论 -
哈希表模拟
哈希表,这个词若是对学过Java集合的人来说,是再熟悉不过的了,一般从数据库力获取的一切属性和值的映射都可用用hash表来存储,被称为万能的HashMap.在C++的STL里有Map,Set,unorderd_map ,unorderd_set,multmap,multset.区别:有序和无序(map和unordered_map)map和unordered_map都是关联容器,用于存储键值对。原创 2023-10-10 12:10:22 · 47 阅读 · 0 评论 -
面试之并查集
输入和输出的注意点:scanf读取字符时会读取空格和回车而scanf读字符串时会自动忽略空格和回车。原创 2023-10-10 12:09:04 · 148 阅读 · 0 评论 -
C语言的六种排序算法
void Swap(int *p, int *q)//三步异或{ *p = *p^*q; *q = *p^*q; *p = *p^*q;}void InsertSort1(int arr[], int n)//插入排序{ int i = 0; int j = 0; for (i = 1; i < n; i++) { int temp = arr[i];//拿出一个元素 if (arr[i] < arr[i - 1]) { for (j = i - 1; a原创 2021-05-31 17:42:36 · 167 阅读 · 0 评论 -
JOE的算数(快速幂算法实现)
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 有一天,JOE终于不能忍受计算a^b%c这种平凡的运算了。所以他决定要求你写一个程序,计算a^b%c。 提示:若b为奇数,,a^b=(a^(b/2))^2*a,否则a^b=(a^(b/2))^2。输入格式 三个非负整数a,b,c;输出格式 一个整数ans,表示a^b%c;样例输入7 2 5样例输出4数据规模和约定 30% a <= 100, b <= 10^4, 1 &l原创 2022-02-26 18:08:44 · 459 阅读 · 0 评论 -
接水问题(C实现)
资源限制时间限制:1.0s 内存限制:64.0MB问题描述 学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的 供水量相等,均为1。 现在有n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1 到n 编号,i 号同学的接水量为wi。接水开始时,1 到m 号同学各占一个水龙头,并同时打 开水龙头接水。当其中某名同学j 完成其接水量要求wj 后,下一名排队等候接水的同学k 马上接替j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪.原创 2022-02-26 17:48:56 · 322 阅读 · 0 评论 -
N皇后问题(C实现)
问题描述 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。输入格式 输入中有一个正整数N≤10,表示棋盘和皇后的数量输出格式 为一个正整数,表示对应输入行的皇后的不同放置数量。样例输入5样例输出10数据规模和约定 N≤10算法思路:用递归的方式判断N*N棋盘上是否有通路,每行一个皇后,当要放置的棋子大于行数时,原创 2022-02-26 18:30:26 · 520 阅读 · 0 评论