算法
文章平均质量分 86
普通网友
这个作者很懒,什么都没留下…
展开
-
<数据结构> - 数据结构在算法比赛中的应用(下)
Trie树Trie字符串统计最大异或对并查集合并集合连通块中点的数量食物链堆堆排序模拟堆原创 2022-08-31 09:34:49 · 571 阅读 · 17 评论 -
<数据结构> - 数据结构在算法比赛中的应用(上)
单链表双链表单调栈单调队列&滑动窗口KMP字符串原创 2022-08-30 15:45:24 · 537 阅读 · 29 评论 -
基础算法 - 常见算法模板题(最简洁写法)【下】
双指针最长连续不重复子序列编辑二进制中1的个数区间和区间合并原创 2022-08-28 07:25:32 · 441 阅读 · 24 评论 -
数据结构 - 平衡二叉树(AVL树)概念 | 插入与平衡调整
前言AVL树的概念AVL树结点的定义AVL树的插入AVL树的平衡调整(重点)LL型不平衡(需右单旋转)RR型不平衡(需左单旋转)LR型不平衡(需左右双旋转)RL型不平衡(需右左双旋转)AVL树简单实现以及验证-插入原创 2022-08-24 10:25:14 · 1296 阅读 · 25 评论 -
基础算法 - 常见算法模板题(最简洁写法)【上】
快速排序第k个数归并排序逆序对的数量二分查找数的范围浮点数二分高精度高精度加法高精度减法高精度乘法(高精度x低精度)高精度除法前缀和与差分前缀和子矩阵的和差分差分矩阵...原创 2022-08-26 09:58:44 · 365 阅读 · 21 评论 -
【数据结构】手撕二叉树oj练习与经典问题
二叉树经典问题一、结点个数二、叶结点个数三、第K层结点个数四、二叉树的深度五、二叉树查找值为x的节点六、二叉树的销毁七、判断二叉树是否是完全二叉树二叉树OJ练习965. 单值二叉树 - 力扣(LeetCode)100. 相同的树 - 力扣(LeetCode)101. 对称二叉树 - 力扣(LeetCode)572. 另一棵树的子树 - 力扣(LeetCode)二叉树遍历_牛客题霸_牛客网 (nowcoder.com)............原创 2022-08-03 10:50:55 · 505 阅读 · 31 评论 -
汉诺塔问题
标准模板void move(char pos1, char pos2){ printf("%c->%c ", pos1, pos2);}void Hanoi(int n, char pos1, char pos2, char pos3)// 1起始位置 2中转位置 3目标位置{ if (n == 1) { move(pos1, pos3); } else { Hanoi(n - 1, pos1, pos2, pos3);//把n-1个盘中放到2 move(po.原创 2021-12-06 21:27:40 · 514 阅读 · 0 评论 -
比赛小技巧
由算法范围反推算法时间复杂度一般ACM ,NOI(CSP)或者笔试题的时间限制是1秒或2秒。在这种情况下,C++代码中的操作次数控制在为最佳。下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:n≤30,指数级别, dfs+剪枝,状态压缩dpn ≤100 => O(n3), floyd,dpn ≤1000 => O(n2),O(n2log(n)),dp,二分n ≤10000 => o(n√n),块状链表n≤100000 =>O(nlog(n))=>原创 2022-02-16 08:13:30 · 1088 阅读 · 17 评论 -
二进制,八进制,十进制,十六进制的相互转换【简单易懂】
目录二进制转十进制十进制原理:二进制转十进制计算:八、十六进制转十进制八、十六进制转十进制计算:十进制转其他进制十进制转二进制:十进制转八进制:十进制转十六进制:不同进制之间的相互转换练一练手:二进制转十进制十进制原理:为了方便学习二进制,我们先来看一下十进制的原理,十进制的特点就是有10个符号来表示一个数字,分别是0123456789;就比如这个数字235,他的个位是5,代表5个1 ,十位是3,代表3个10,百位是2,代表两个...原创 2022-03-04 19:59:27 · 5248 阅读 · 22 评论 -
【数据结构】一篇深入理解二叉树计算
I.树的概念及结构树的概念树的结构树的专有名词树的表示树在实际中的运用II.二叉树的概念及结构二叉树的概念 特殊的二叉树二叉树的性质完全二叉树小知识III.例题巩固...原创 2022-08-01 09:31:39 · 1486 阅读 · 25 评论 -
链表Oj练习题 纯C语言
链表分割链表分割思路:遍历原链表 把<x的插入到一个链表 把>=×的插入到一个链表 链表1和链表2链接起来假设链表为3 5 1 6 3 4则分为: 3 1 3 5 6 4之后相连即可魔鬼细节:如图所示,如果6是大链的最后一个数,那么greaterTail->next仍然指向3,会成环所以需要greaterTail->next=NULL; 防止死循环/*struct ListNode { int val;......原创 2022-07-29 08:45:26 · 379 阅读 · 19 评论 -
蓝桥杯AcWing 题目题解 - 数学与简单DP
AcWing 1230. K倍区间枚举 O(n3)可以很简单的写出暴力代码,直接三重循环for(int r = 1; r <= n; r ++) for(int l = 1; l <= r; l ++) { int sum = 0; for(int i = l; i <= r; i ++) sum += a[i]; if(sum % k == 0) ans ++; }枚举左右...原创 2022-02-05 22:51:39 · 6725 阅读 · 15 评论 -
基础算法笔记
1.快速排序#include<iostream>using namespace std;void qsort(int l,int r){ int i=l,j=r; int mid=a[(l+r)/2]; do{ while(a[i]<mid) i++; while(a[j]>mid) j--; if(i<=j) { swap(a[i],a[j]); i++; j--; } }while(i<=j); i原创 2022-01-24 22:25:26 · 345 阅读 · 12 评论 -
算法 - 蓝桥杯并查集题型
作用与基本原理:套路:用一道模板题方便讲解;合并集合首先设置一个函数find();find()函数的作用如问题2, 求集合的祖宗节点(while(p[x]!=x) x=p[x] 如果不是根就找上一个,直到找到根为止)元素合并操作:(元素也是集合)开始时每个集合都是一个独立的集合,并且都是等于自己本身下标的数例如:p[5]=5,p[3]=3;如果是M操作的话那么就将集合进行合并,合并的操作是:p[3]=p[5]=5;所以3的...原创 2022-03-29 09:54:02 · 423 阅读 · 19 评论 -
算法 - 哈希表
注意:二次探测法是跳跃式探测,效率较高,但是会出现明明有空间却探测不到的情况,因而存储失败,而线性探测只要有空间就一定能够探测成功。例如,一组关键字(14,36,42,38,40,15,19,12,51,65,34,25) ,若表长为15,散列函数为hash(key)=key%13,采用链地址法处理冲突,构造该散列表,计算查找成功和查找失败的平均查找长度......原创 2022-03-28 16:42:53 · 955 阅读 · 21 评论 -
算法 - 模拟
前言:所谓的模拟题,运用的“模拟算法”,其实并没有什么完全准确的定义。模拟算法,用一句老话说,就是“照着葫芦画瓢”;官方化的诠释则是:根据题目表述进行筛选提取关键要素,按需求书写代码解决实际问题。模拟这个算法其实并不难,主要是逻辑上的麻烦,但正常刷题时我们都不把模拟的逻辑思维理清就直接做,如果这题没有太水的话,是非常容易错的。核心操作:应该边阅读边将有关的条件一条条地记录下来,阅读完成后要反复核对,先在草稿纸上将流程模拟一遍再动手写代码!!千万别贪快!!...原创 2022-03-04 00:17:25 · 2942 阅读 · 15 评论 -
深度优先搜索 - DFS(暴搜)
DFS思路应用-穷举求解问题在无路可走时,我们往往会选择搜索算法,因为我们期望利用计算机的高性能来有目的的穷举一个问题的部分甚至所有可能情况,从而在这些情况中寻找符合题目要求的答案。这也是“爆搜”之名的 由来我们约定,对于问题的介入状态,叫初始状态,要求的状态叫目标状态。这里的搜索就是对实时产生的状态进行分析检测,直到得到一个目标状态或符合要求的最佳状态为止。对于实时产生新的状态的过程叫扩展(由一个状态,应用规则,产生新状态的过程)搜索的要点: 选定初始状态,在某些问题中可能是从多.原创 2022-02-15 10:09:44 · 2182 阅读 · 13 评论 -
位运算(& | ~ ^ >> <<)
二进制中1的个数算法1、(暴力枚举) O(nlongn)思路:对于每个数字a,a&1得到了该数字的最后一位,之后将a右移一位,直到位0,就得到了1的个数C++ 代码#include<iostream>using namespace std;int n;int a,k;int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a.原创 2022-02-20 15:16:48 · 646 阅读 · 11 评论 -
算法 - 暴力枚举
枚举的基本条件: (1)时间条件:首先是时间条件。一般来说主流的OJ当中,1000ms的时间限制下可以运行操作数为10^7以内的运算(通常10^6以内较为保险),所以在采用枚举方法之前最好看一下数据范围,确保整个程序的执行操作数不会超过10^6-10^7这个量级,如果超过了就尝试更换枚举的维度或者使用其他算法吧。 (2)编程上的实现条件:其次是编程上的实现条件。在编程实现上,一般来说暴力枚举需要两个条件,一是枚举的范围一般需要连续,如果枚举范围是离散的,那么一般很难使用for循环枚举出所原创 2022-02-19 23:15:28 · 3592 阅读 · 14 评论 -
背包问题总结
目录01背包问题完全背包问题多重背包问题 I分组背包问题01背包问题AcWing 2. 01背包问题(状态转移方程讲解) - AcWing当前的状态依赖于之前的状态,可以理解为从初始状态f[0][0] = 0开始决策,有 N 件物品,则需要 N 次决 策,每一次对第 i 件物品的决策,状态f[i][j]不断由之前的状态更新而来。当前背包容量不够(j < v[i]),没得选,因此前 i 个物品最优解即为前 i−1个物品最优解:对应代码:f[i][j] = f..原创 2022-02-17 15:57:31 · 379 阅读 · 10 评论