算法
文章平均质量分 89
各种算法题目,对算法知识点进行记录
瑆鈅掖
无
展开
-
双指针算法、位运算、离散化和区间合并
对于每一个i,如何确定j的位置:由于[j, i - 1]是前一步得到的最长连续不重复子序列,所以如果[j, i]中有重复元素,一定是a[i],因此右移j直到a[i]不重复为止(由于[j, i - 1]已经是前一步的最优解,此时j只可能右移以剔除重复元素a[i],不可能左移增加元素,因此,j具有“单调性”、本题可用双指针降低复杂度)。给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。原创 2024-06-02 16:29:27 · 719 阅读 · 0 评论 -
DFS、BFS、树与图的深度优先遍历和树与图的广度优先遍历
给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。原创 2024-05-30 15:22:04 · 621 阅读 · 0 评论 -
组合数、容斥原理和博弈论
给定 n 组询问,每组询问给定两个整数 a,b,请你输出Cmod(109+7)的值。原创 2024-05-26 21:56:23 · 1037 阅读 · 0 评论 -
欧拉函数、快速幂、扩展欧几里得算法、中国剩余定理和高斯消元
给定 n 个正整数 a,请你求出每个数的欧拉函数。欧拉函数的定义1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。若在算数基本定理中,N=p1p…p,则:ϕ(N) = N×p1−1/p1×p2−1/p2×…×pm−1/pm。原创 2024-05-25 22:08:43 · 992 阅读 · 0 评论 -
质数和约数
最大公约数(Greatest Common Divisor)指两个或多个整数共有约数中最大的一个。也称最大公因数、最大公因子,a, b的最大公约数记为(a,b),同样的,a,b,c的最大 公约数记为(a,b,c),多个 整数的最大公约数也有同样的记号。求最大公约数有多种 方法,常见的有 质因数分解法、 短除法、 辗转相除法、 更相减损法。原创 2024-05-21 20:29:42 · 1239 阅读 · 0 评论 -
动态规划-计数、数位统计、状态压缩、树形、记忆化搜索
一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中 n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数 n 的一种划分。现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。原创 2024-05-21 17:15:28 · 826 阅读 · 0 评论 -
动态规划-线性DP和区间DP
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。原创 2024-05-19 16:24:37 · 891 阅读 · 0 评论 -
动态规划-背包问题
动态规划可以分为状态表示和状态计算两个步骤。原创 2024-05-18 18:26:12 · 1276 阅读 · 0 评论 -
前缀和与差分
一个长度为n的数组a[0]-a[n-1],它的前缀和sum[i]等于a[0]-a[i]的和。例如,sum[0]=a[0],sum[1]=a[0]+a[1],sum[2]=a[0]+a[2],等等。利用递推,可以在O(n)时间内求得所有前缀和:sum[i]=sum[i-1]+a[i]。如果预计算出前缀和,就能利用它快速计算出数组中任意区间a[i]-a[j]的和,即a[i]+a[i+1]+…+a[j-1]+a[j]=sum[j]-sum[i-1]。原创 2024-05-05 17:09:04 · 553 阅读 · 0 评论 -
高精度加减乘除
给定两个正整数(不含前导 0),计算它们的和。原创 2024-05-05 11:33:33 · 765 阅读 · 0 评论 -
堆排序和堆模拟
堆是一种树形结构,树的根是堆顶,堆顶始终保持为所有元素的最优值。有最大堆和最小堆,最大堆的根节点是堆的最大值,最小堆的根节点是最小值。堆一般用二叉树实现,称为二叉堆。二叉堆的典型应用就是堆排序和优先队列。原创 2024-05-04 18:00:23 · 605 阅读 · 0 评论 -
笨拙的手指
奶牛贝茜正在学习如何在不同进制之间转换数字。但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔。每当贝茜将数字转换为一个新的进制并写下结果时,她总是将其中的某一位数字写错。例如,如果她将数字14转换为二进制数,那么正确的结果应为 1110,但她可能会写下 0110或 1111。贝茜不会额外添加或删除数字,但是可能会由于写错数字的原因,写下包含前导 0 的数字。给定贝茜将数字 N转换为二进制数字以及三进制数字的结果,请确定 N的正确初始值(十进制表示)。原创 2024-05-01 21:54:56 · 178 阅读 · 0 评论 -
贪心-题目
在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。达达决定把所有的果子合成一堆。每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过 n−1次合并之后,就只剩下一堆了。达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节省体力。原创 2024-05-01 15:26:30 · 292 阅读 · 0 评论 -
贪心-区间问题
给定 N个闭区间 [a,b],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。原创 2024-05-01 14:43:18 · 866 阅读 · 1 评论 -
分治法思想和题目
当我们遇到一个难以直接解决的大问题时,自然会想到把它划分成一些规模较小的子问题,各个击破,“分而治之(DivideandConquer)”。分治算法的具体操作是把原问题分成k个较小规模的子问题,对这k个子问题分别求解。如果子问题不够小,那么把每个子问题再划分为规模更小的子问题。这样一直分解下去,直到问题足够小,很容易求出这些小问题的解为止。能用分治法的题目,需要符合以下两个特征。(1)平衡子问题:子问题的规模大致相同。能把问题划分成大小差不多相等的k个子问题,一般k=2,即分成两个规模相等的子问题。原创 2024-04-25 00:16:18 · 995 阅读 · 1 评论 -
数据结构-链表
链表的特点是用一组任意位置的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。链表的操作有初始化、添加、遍历、插入、删除、查找、释放等。链表分为单向链表和双向链表。链表一般是循环的,收尾相连的,最后一个节点的next指针指向第1个节点,第1个节点的pre指针指向最后一个节点。单向链表只有一个遍历方向,双向链表有两个遍历方向。在需要频繁访问前后几个节点的时候使用双向链表。下面给出一个题目(报数问题),给出动态链表,静态链表、STL 链表解决问题的方案10 3。原创 2024-04-07 10:33:35 · 627 阅读 · 0 评论