重生之我要刷算法
文章平均质量分 78
算法相关内容合集
重生之我是Banana
这个作者很懒,什么都没留下…
展开
-
使用VSCode刷LeetCode
本文章用来记录使用VS Code刷中遇到的一系列问题。原创 2024-05-12 00:11:38 · 1661 阅读 · 1 评论 -
1.两数之和【LeetCode】
Map 的键和值不能使用基本数据类型作为类型参数,因为泛型类型参数不能是基本数据类型,而只能是对象类型。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。在声明HashMap的时候,用了如下的写法报错。有点忘记怎么初始化int数组了…**进阶:**你可以想出一个时间复杂度小于。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。原创 2024-05-12 00:06:49 · 260 阅读 · 0 评论 -
区间相关问题的整理
区间相关问题的整理掌握这些类型的区间问题,并且熟练掌握,就可以解决部分区间问题,当然不是全部,hhh,在这里我整理了一下相关区间问题的模板题,因为目前刷的题目还比较少,如果后续遇到其他类型的区间题目,也会更新!如果有存在问题希望大家能够指出。类型:1)最少点覆盖所有区间问题(区间选点)2)选取不相交区间最大数量(最大不想交区间数量)3)组内区间两两不相交的最小组数(区间分组)4)选择最少区间覆盖线段区间(区间覆盖)1)最少点覆盖所有区间问题(区间选点)模板题目给定 N 个闭区间 [ai,原创 2022-03-31 15:29:05 · 1367 阅读 · 1 评论 -
辗转相除法(欧几里得算法)的证明以及代码
辗转相除法(欧几里得算法)的证明以及代码模板题:最大公约数给定 n 对正整数ai,bi,请你求出每对数的最大公约数。输入格式第一行包含整数n。接下来 n 行,每行包含一个整数对 ai,bi。输出格式输出共 n 行,每行输出一个整数对的最大公约数。数据范围1≤n≤10^5,1≤ai,bi≤2×10^9输入样例:23 64 6输出样例:32AC代码:#include <iostream>#include <algorithm>#include原创 2022-03-31 21:11:04 · 828 阅读 · 0 评论 -
背包问题整理以及模板
背包问题整理以及模板背包问题是动态规划中的一大类。题解学习自dd大牛的《背包九讲》 - 贺佐安 - 博客园 (cnblogs.com)动态规划(DP)问题:核心思路: 把原问题分解为若干子问题,然后自底向上,先求解最小的子问题,把结果存下来(一般是通过数组记录下来),再求解大的子问题,可以直接从之前记录中查找小的子问题的解,避免重复计算(通过递推公式),从而降低算法的时间复杂度。 动态规划可以用一个数去表示一个集合,每次操作都是对集合而言,因此相对暴搜去搜索整个集合来说是比较快的面向问原创 2022-04-05 12:14:14 · 468 阅读 · 0 评论 -
n皇后问题思路分析即代码实现(有注释)
在n * n的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之在同一行、同一列、同一斜线上的棋子。设计算法在n * n的期盼上放置n个皇后,使其彼此不受攻击。核心思路: 以行为主导,去考虑每一行的皇后该放在哪一列,才能获得可行解。n皇后问题解的形式: n元组 {x1, x2, … , xi , …, xn}, 分量xi表示第i行皇后放置的列位置(即i行xi列)解空间组织结构: m叉树(m = n)显约束(对解分量的取值范围的限定): 不同列(取值1 ~ n)隐约束(能否得到问题的可行解原创 2022-06-03 21:43:07 · 923 阅读 · 0 评论 -
前、中、后缀表达式和表达式树
前、中、后缀表达式和表达式树前、中、后缀表达式的区别取决于操作符和操作数的位置:1、前缀表达式:操作符在操作数前面,可通过前序遍历表达式树获得。2、中缀表达式:操作符在操作数中间,可通过中序遍历表达式树获得(中缀表达式通过中序遍历得到后的括号是必须的)。3、后缀表达式:操作符在操作数后面,可通过后序遍历表达式树获得。表达式的二叉树(表达式树):表达式树: 即用二叉树来表示代数表达式,数的每一个内部节点都代表一个运算符,每一个叶子结点代表一个运算符数。构造: 对于给定的中缀表达式(即代数表达式原创 2022-05-29 20:04:23 · 1772 阅读 · 0 评论 -
游艇租赁(区间DP)思路分析及代码实现(有注释)
游艇租赁(区间DP)题目:每个游艇出租站到出租站需要不同的租金,求从出租站i到出租站j所需要的最少租金。思路分析:状态表示: 我们令f[i] [j]表示从出租站i到出租站j需要的最少租金初始化:对于状态表示f[i] [j]初始化:当i == j : f[i] [j] = 0;当i != j (只经过两个站点): f[i] [j] = 出租站i 到 出租站j 所需要的租金。//在输入两点距离时候就可以完成对f状态数组的初始化://r数组存放两个点之间需要的租金//对i = j的情况,因为原创 2022-05-14 15:47:26 · 303 阅读 · 0 评论 -
编辑距离思路分析及代码实现(有注释)
编辑距离编辑距离定义:将一个字符串A通过增、删、变的操作变成另一个字符串B需要的最少操作数比如:A = ‘FAMILY’ , B = ‘FRAME’, 将s1变成s2的最小操作数是4.思路分析:状态表示:我们令d[i] [j]表示A字符串前i个元素变成B字符串前j个元素的最少操作数。初始化:初始化的目的是让后续的自底向上计算最优值正确,当然初始化赋值结果也不难理解。对于i = 0时候,即A取空字符串,如果A字符串要转换成B字符串,随着B内元素个数j增加执行插入操作次数也随之增加,即://l原创 2022-05-13 19:15:16 · 340 阅读 · 0 评论 -
三种质数筛(朴素、埃氏、欧拉)
三种质数筛(朴素、埃氏、欧拉)目的: 将 1 ~ N 中的质数都筛选出来。方一、普通质数筛思路分析:从2到n进行遍历,对于遍历到的数如果没有被筛掉,就说明该数是素数。然后每次把遍历到的数i的倍数都筛去。为什么说这个方案可以筛出质数可行呢?因为对于一个数p,它如果没有被筛掉,就说明其不是前面2p-1的倍数,也就是说2p-1不存在p的约数,这不就是素数的定义!时间复杂度分析:O(nlogn)对于 i = 2,需要删除n / 2个数;对于 i = 3, 需要删除 n / 3个数……可以推出原创 2022-05-10 21:33:59 · 3641 阅读 · 4 评论 -
Codeforces Round #786 (Div. 3)题解A~F
Codeforces Round #786 (Div. 3)A. Number Transformation原题:题目大意:给你一个x,y,问你能否对x通过乘以a次b可以得到y的方案,可以输出a和b即可(答案不唯一),如果不可以,输出0 0。思路分析:略代码:#include <iostream>#include <algorithm>#include <cstring>using namespace std;int t, a, b, x, y;原创 2022-05-05 17:37:25 · 1128 阅读 · 0 评论 -
ACWing 第49场周赛
ACWing 第49场周赛A、组队题目:给定 nn 个整数 y1,y2,…,yn,及一个整数 k。先求出有多少个 yiyi 满足 yi+k≤5,然后输出满足要求的 yi 的个数除以 3 下取整的值。输入格式第一行包含两个整数 n 和 k。第二行包含 n 个整数 y1,y2,…,yn。输出格式一个整数,表示答案。数据范围前 44 个测试点满足 1≤n≤61≤n≤6。所有测试点满足 1≤n≤2000,1≤k≤5,0≤yi≤5。输入样例1:5 20 4 5 1 0输出样例1:1原创 2022-05-02 22:28:18 · 219 阅读 · 0 评论 -
二分图的知识点整理(判断和最大匹配值)
二分图二分图的定义: 如果一个图是二分图,那么图中所有的点都能够划分到两个集合中,使得点与点之前的边都在两个集合之间,集合内部没有边。二分图的重要性质1):二分图当且仅当图中不含奇数环。 假设一个环中有n个点,如果n是奇数,那么第1个顶点和第n个顶点肯定会被加入到同一个集合中,即集合内部有边相连,则无法构成二分图;如果n是偶数,那么第1个顶点和第n个顶点肯定会被加入到不同的集合中,即点与点之间的边在两个集合之间,满足二分图的定义,能够构成二分图通过染色法判断一个图是否是二分图:时间复原创 2022-05-01 21:38:16 · 588 阅读 · 0 评论 -
最长公共子序列(详细代码 注释 分析 以及求出最长公共子序列内容方法)
最长的公共子序列文章有些长,希望能够耐心看完,并且对你有帮助,文章是自己看了书之后,总结的,如果有什么错误的地方,欢迎指出。一些基本的概念:子序列: 原序列中删除若干个元素得到的序列,即原序列中可以不连续的一段子串: 原序列中任意个连续的序列元素组成的序列,即原序列中必须连续的一段。(两者的元素顺序必须和原序列中的顺序一样)最长公共子序列: 一个序列即是X序列的子序列,也是Y序列的子序列,则该序列称为为X和Y的公共子序列。对于两个序列的公共子序列是不唯一的,因此,最长公共子序列顾名思义就是长度原创 2022-04-25 22:21:03 · 10664 阅读 · 2 评论 -
L2-011 玩转二叉树 (25 分) —— 团体程序设计天梯赛
L2-011 玩转二叉树 (25 分)给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1 3原创 2022-04-20 16:24:29 · 116 阅读 · 0 评论 -
二叉树遍历问题整理
二叉树遍历问题整理一、知二叉树先序和中序遍历求后序遍历方一、直接递归找后序遍历分析:知道二叉树的先序和中序遍历,求其后序遍历: 对于先序遍历的第一个元素是整个二叉树的根节点,对应的,我们可以在中序遍历中找到该元素的位置,因为中序遍历的顺序是先左节点,再根节点,再是右节点,所以在中序遍历中,该元素位置左边的元素都是该根节点左子树中的元素,该元素位置右边的元素都是该根节点右子树中的元素,同样也可以根据左右元素的数量知道左子树和右子树元素的数量。因为对于先序遍历,是按照根左右的顺序,所以我们可以在原创 2022-04-19 23:50:52 · 1462 阅读 · 0 评论 -
状态压缩DP —— 积木画(十三届蓝桥杯)
积木画附原题题目:小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2 个单位面积)和 L 型(大小为 3 个单位面积):同时,小明有一块面积大小为 2×N 的画布,画布由 2×N 个 1×1 区域构成。小明需要用以上两种积木将画布拼满,他想知道总共有多少种不同的方式?积木可以任意旋转,且画布的方向固定。输入格式输入一个整数 N,表示画布大小。输出格式输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007 取模后的值。数据范围1≤N≤107。原创 2022-04-15 17:32:38 · 644 阅读 · 0 评论 -
状态压缩DP —— 蒙德里安的梦想
蒙德里安的梦想学习自Acwing,附Acwing原题题目:求把 N×M 的棋盘分割成若干个 1×2 的长方形,有多少种方案。例如当 N=2,M=4 时,共有 5 种方案。当 N=2,M=3 时,共有 3 种方案。输入格式输入包含多组测试用例。每组测试用例占一行,包含两个整数 N 和 M。当输入用例 N=0,M=0 时,表示输入终止,且该用例无需处理。输出格式每个测试用例输出一个结果,每个结果占一行。数据范围1≤N,M≤11输入样例:1 21 31 42 22 32 4原创 2022-04-15 14:48:15 · 167 阅读 · 0 评论 -
最小生成树 -- prim算法以及Kruskal算法实现
最小生成树基本概念:最小生成树: 将n个顶点的图联通,最少只需要n - 1条边,构建最小生成树的目的是将各个 顶点连通起来且权值和最小。子图: 从原图中选中一些顶点和边组成的图,称为原图的子图。生成子图: 在原图中选中一些边和所有顶点组成的图,称为原图的生成子图生成树: 如果生成子图恰好是一棵树,则成为生成树(无环路的连通图)最小生成树: 权值之和最小的生成树,则成为最小生成树prim算法(避圈法)实现最小生成树核心思想:通过选点产生最小生成树。把已经生成树中的节点看作是一个集合,把剩下原创 2022-04-06 12:59:46 · 2268 阅读 · 0 评论 -
哈夫曼编码原理分析及代码实现(有注释)
哈夫曼编码借鉴《趣学算法》–陈小玉应用: 数据压缩核心思想: 权值越大的叶子离根越近。实现方法: 构建哈夫曼树:每次从数的集合中取出没有双亲且权值最小的两棵树作为左右子树(贪心的思想),构建一棵新树,新树的根节点的权值为其左右孩子结点权值之和,将新数插入到数的集合中,通过n-1次这样的合并,构建成的树即为哈夫曼树。(因为n个点,所以要进行n-1次合并);求哈夫曼编码:约定左分支上的编码为0,右分支上的编码为1,从叶子结点到根节点逆向求出每个字符的哈夫曼编码,从根节点到叶子结点路径上的字符组成的字符串原创 2022-04-06 12:48:11 · 7765 阅读 · 2 评论 -
并查集模板详细分析以及代码
并查集模板题:合并集合一共有 n个数,编号是 1∼n,最开始每个数各自在一个集合中。现在要进行 mm 个操作,操作共有两种:M a b,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;Q a b,询问编号为 a 和 b 的两个数是否在同一个集合中;输入格式第一行输入整数 n 和 m。接下来 m 行,每行包含一个操作指令,指令为 M a b 或 Q a b 中的一种。输出格式对于每个询问指令 Q a b,都要输出一个结果,如果 a 和 b 在同原创 2022-04-05 16:33:50 · 254 阅读 · 0 评论 -
二分查找模板总结
二分查找模板总结1、整数二分查找二分整数模板:1.循环必须是l < r2.if判断条件看是不是不满足条件, 然后修改上下界3.若if else后是r = mid - 1,则前面mid 语句要加14.出循环一定是l == r,所以l和r用哪个都可以总思路:目标在闭区间[l,r]中,我们每次将区间长度缩小一半,当l==r(while(l<r))时,我们就找到了目标值,但由于死循环的边界问题,所以我们要注意书写的格式,因此有两个版本:版本1:当我们将区间[l, r]划分成[l, mi原创 2022-04-02 23:36:46 · 357 阅读 · 0 评论 -
ACWing 第 45 场周赛题解
ACWing 第 45 场周赛A、字符串价值每个字符 1 的价值为 a1,每个字符 2 的价值为 a2,每个字符 3 的价值为 a3,每个字符 4 的价值为 a4。一个字符串的价值等于其所包含的所有字符的价值之和。给定一个由字符 1、2、3、4 构成的字符串 SS,请你计算它的价值。输入格式第一行包含四个整数 a1,a2,a3,a4。第二行包含一个字符串 S。输出格式一个整数,表示字符串 SS 的价值。数据范围前三个测试点满足 0≤a1,a2,a3,a4≤5,1≤|S|≤10。所有测原创 2022-04-02 22:39:11 · 313 阅读 · 0 评论 -
等差数列 —— 第十届蓝桥杯省赛C++B/C组
等差数列题目数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?输入格式输入的第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,···,AN。(注意 A1∼AN 并不一定是按等差数列中的顺序给出)输出格式输出一个整数表示答案。数据范围2≤N≤100000,0≤Ai≤10^9输入样例:52 6 4 10 20输出样例:10样例解释包含原创 2022-03-31 20:38:39 · 242 阅读 · 0 评论 -
雷达设备 —— 《算法竞赛进阶指南》
雷达设备题目:假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。每个小岛都位于海洋一侧的某个点上。雷达装置均位于海岸线上,且雷达的监测范围为 d,当小岛与某雷达的距离不超过 d 时,该小岛可以被雷达覆盖。我们使用笛卡尔坐标系,定义海岸线为 x 轴,海的一侧在 x 轴上方,陆地一侧在 x 轴下方。现在给出每个小岛的具体坐标以及雷达的检测范围,请你求出能够使所有小岛都被雷达覆盖所需的最小雷达数目。输入格式第一行输入两个整数 n 和 d,分别代表小岛数目和雷达检测范围。接下来 n原创 2022-03-30 23:27:15 · 135 阅读 · 0 评论 -
货仓选址 —— 《算法竞赛进阶指南》
货仓选址在一条数轴上有 N 家商店,它们的坐标分别为 A1∼AN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。输入格式第一行输入整数 N。第二行 N 个整数 A1∼AN。输出格式输出一个整数,表示距离之和的最小值。数据范围1≤N≤100000,0≤Ai≤40000输入样例:46 2 9 1输出样例:12时间复杂度:O(nlog2n)算法: 贪心、绝对值不等式思路分析:原创 2022-03-30 20:20:37 · 531 阅读 · 0 评论 -
糖果传递 ——《算法竞赛进阶指南》
糖果传递题目:题目描述:有 n 个小朋友坐成一圈,每人有 a[i] 个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为 1。求使所有人获得均等糖果的最小代价。输入格式第一行输入一个正整数 n,表示小朋友的个数。接下来 n 行,每行一个整数 a[i],表示第 i 个小朋友初始得到的糖果的颗数。输出格式输出一个整数,表示最小代价。数据范围1≤n≤1000000,0≤a[i]≤2×10^9,数据保证一定有解。输入样例:41254输出样例:4时间复杂度原创 2022-03-30 20:06:09 · 489 阅读 · 0 评论 -
A - Digit Sum of 2x (AtCoder Regular Contest 144)
AtCoder Regular Contest 144 第一题原创 2022-07-22 11:12:46 · 248 阅读 · 0 评论 -
Acwing第50场周赛题解
第59场Acwing周赛的题解原创 2022-07-14 14:04:52 · 225 阅读 · 0 评论 -
扩展欧几里得算法思路分析以及扩展
扩展欧几里得算法思路分析:根据裴蜀定理知:gcd(a, b): a 和 b 的最大公约数对于任意一对正整数a, b, 那么一定存在整数x, y, 使得ax + by = gcd(a, b)ax + by = d, d 一定是 gcd(a, b)的倍数,且其最小正整数就是gcd(a,b)证明:因为a 是 gcd(a,b)的倍数,b 也是gcd(a,b)的倍数,所以ax + by 也一定是gcd(a,b)倍数,正整数倍数最小为1倍即gcd(a,b)扩展欧几里得算法(exgcd):用于求解ax原创 2022-05-29 23:19:17 · 501 阅读 · 0 评论 -
CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes! (A - D 题解)
codeforces 的 CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!原创 2022-08-01 11:25:41 · 662 阅读 · 0 评论 -
逆元概念及其求解方法
逆元引出存在取模运算公式:(a + b) % c = (a % c + b % c) % c(a * b) % c = (a % c * b % c) % c(a - b) % c = (a % c - b % c) % c但是不存在取模运算公式:(a / b) % c = (a % c / b % c) % c这时候逆元就出现了,逆元就是在mod下,不能直接除以一个数,而是要乘以它的逆元。我们令inv(b)表示b的逆元,即inv(b) = b ^ -1那么对于公式 (a / b) %原创 2022-05-29 23:25:44 · 10232 阅读 · 4 评论