![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 57
清梦2020
计算机菜鸟一枚....
展开
-
背包与魔法 2022年国赛 背包问题
首先不考虑使用魔法的情况,就是单纯地背包问题。唯一不同的就是使用魔法可以让你所拿的物品中的一个物品的价值翻倍。所以你需要记录每一步中拿到的单个商品的最大值,用于后面确定加倍的是最大价值。原创 2023-06-08 20:24:23 · 175 阅读 · 0 评论 -
迷宫 2022年国赛 BFS+记忆化搜索
所以这里可以想到记忆化搜索,即一个dp[i] = min(dp[i+1],dp[i-1],dp[i+N],dp[i-N],dp[i])。min函数中的dp[i]代表通过传送门计算的距离,也就是一个点的最短路径由他上下左右和传送门后的点的最小值确定。平常的记忆化搜索都是min(dp[i+1],dp[i+N]),也就是他左移和下移一格位置的最小值。但是因为本题传送门的问题,导致可能上面的点可以更快的到达终点。对于遍历,我们利用BFS的思想,以广度优先搜索第一遍历的肯定要比后来遍历到该点路径要短。原创 2023-06-08 17:17:11 · 200 阅读 · 0 评论 -
左移右移 2022年国赛 思维
简单的思维题,应该从后往前遍历操作。如果后面的对数i操作过,则前面对数i的操作都可以无视。可以通过栈这种数据结构实现后往前遍历。原创 2023-06-08 09:05:46 · 177 阅读 · 0 评论 -
数数 2022年国赛 数论-动态规划
有一些动态规划的意思,首先得出i的素数相乘的个数为dp[i],在让i*j的相乘素数个数为dp[i*j]=dp[i]+1;j从素数列表中取出,且i%j==0时就不需要再遍历后续的素数了。因为后面i*j的结果会再次遍历的时候出现。例如:i=5x7,j=9是后续会被遇到的应该在 i=5x7,j=5时就停止。因为后面会遍历到i=7x9,j=5。所以保证要j不超过i中任意一个素数,这样就会优化将近一半的时间。原创 2023-06-07 21:09:05 · 102 阅读 · 0 评论 -
123 2021年国赛 二分搜索+前缀和
主要是考察前缀和,我们将数组划分为若干个小区间,第i个区间是1,2,3....,i。最终的索引下标=前一个区间的索引+数num所在区间的距离第一个元素的偏移量。小蓝发现,这个数列前 1 项是整数 1,接下来 2 项是整数 1 至 2,接下来 3 项是整数 1 至 3,接下来 4 项是整数 1 至 4,依次类推。接下来 T 行,每行包含一组询问,其中第 i 行包含两个整数 l和 r,表示询问数列中第 l个数到第 r 个数的和。输入的第一行包含一个整数 T,表示询问的个数。的long数组大约为256mb。原创 2023-06-07 19:24:43 · 717 阅读 · 0 评论 -
路径之谜 2016年国赛 深度优先搜索
有时是可以的,比如上图中的例子。为了方便表示,我们约定每个小格子用一个数字代表,从西北角开始编号: 0,1,2,3 \cdots⋯。本题的要求就是已知箭靶数字,求骑士的行走路径(测试数据保证路径唯一)第一行一个整数 N (0≤N≤20),表示地面有 N×N 个方格。第二行 N 个整数,空格分开,表示北边的箭靶上的数字(自西向东)第三行 N 个整数,空格分开,表示西边的箭靶上的数字(自北向南)小明冒充 XX 星球的骑士,进入了一个奇怪的城堡。假设城堡地面是 n×n 个方格。输出一行若干个整数,表示骑士路径。原创 2023-06-07 16:15:42 · 692 阅读 · 0 评论 -
刷题整理(持续更新~)
哈希表并查集递归前缀和广度优先搜索记忆化搜索哈希表日期问题二分查找滑动窗口数论最短路径。原创 2023-06-07 16:10:01 · 645 阅读 · 0 评论 -
最大子段和 三种方法线性dp、前缀和、贪心
给出一个长度为 n 的序列 a,选出其中连续且非空的一段使得这段和最大。输入格式第一行是一个整数,表示序列的长度 n。第二行有 n个整数,第 i 个整数表示序列的第 i个数字 a_i输出格式输出一行一个整数表示答案。很经典的题,我这里只写状态转移方程,提供思路防止以后忘记。 dp[i]为第i个位置的最大字段和。思路其实就是开始遍历每个元素,在取第i个元素的情况下,要不要加上之前最大的字段和。也就是加上前面的字段和会不会让当前的数更小,也就是前面的最大字段和是不是负数。如果前面的字段和是负数,那么等于的原创 2022-06-10 09:46:35 · 706 阅读 · 0 评论 -
洛谷 P1886 滑动窗口 /【模板】单调队列 Java实现
有一个长为 nnn 的序列 aaa,以及一个大小为 kkk 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。例如:The array is [1,3,−1,−3,5,3,6,7][1,3,-1,-3,5,3,6,7][1,3,−1,−3,5,3,6,7], and k=3k = 3k=3。输入一共有两行,第一行有两个正整数 n,kn,kn,k。第二行 nnn 个整数,表示序列 aaa输出共两行,第一行为每次窗口滑动的最小值第二行为每次窗口滑动的最大值样例输出原创 2022-06-08 18:12:34 · 464 阅读 · 0 评论 -
组合数--杨辉三角、快速幂模板和比较
快速求组合数的两种方法,利用杨辉三角的性质、利用快速幂求解原创 2022-04-08 10:57:30 · 277 阅读 · 0 评论 -
备战蓝桥杯--最短路径模板
Dijsktra(堆优化、枚举)、Floyd、SPFA算法模板,Java实现。三种算法对比,解决模板题。原创 2022-04-06 19:36:07 · 903 阅读 · 0 评论 -
蓝桥杯算法提高 集合合并(并查集模板)Java实现
题目资源限制内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述 一开始有n个集合,{1},{2}……{n}。 定义一个操作,给定两个数a,b,用a,b所在的集合的并集代替a和b原来所在的集合。 求操作之后的集合个数。输入格式 第一行是两个自然数n,m(其中m小于n,m和n小于3000),分别表示一开始的集合个数和操作的总数。 接下来m行,每行两个整数a,b,表示合并a,b所在集合。输出格式原创 2022-04-03 17:00:37 · 934 阅读 · 1 评论 -
线段树模板(加法、乘法、加法乘法混合)-Java实现
Java实现线段树的基本操作,包括单点修改,区间修改,区间查询,区间乘法加法混合,lazy标记、pushdown。超详细版本,看这一篇就够了。原创 2022-03-31 19:04:40 · 645 阅读 · 0 评论 -
HashMap用自定义类出现查找不到的问题
问题描述HashMap在用自定义类的时候HashMap<Node> map=new Hash<Node>();当你map.add(new Node(1,1)),你会发现,每次都可以添加进去。结果: 这是因为HashMap去添加一个元素的过程是这样的:先去计算hashcode(),然后去取余table数组的长度,然后放入table数组。所以在比对是否HashMap中包括一个元素的时候,先会对这个对象去hashcode(),但是当你new Node(1,1);的时候,每次的原创 2022-03-13 11:43:35 · 910 阅读 · 0 评论 -
恢复二叉搜索树
题目描述给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。示例:输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/recover-binary-search-tree著作权归领扣原创 2022-01-28 23:21:27 · 459 阅读 · 0 评论 -
验证二叉搜索树
题目描述给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:root = [2,1,3]输出:true来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/validate-binary-search-tree著作权归领扣网络所有。商业转载请联系官方授权原创 2022-01-27 13:29:24 · 495 阅读 · 0 评论 -
JAVA实现——插入排序、冒泡排序、选择排序、希尔排序
插入排序插入排序将数组分为未排序和已排序。首先将数组第一个默认为已排序。然后将后面的未排序的元素不断的插入到已排序的区域。该排序算法的缺点:每次插入时,都必须将元素与前面已排序的元素比较,来确定正确的位置。这样的话,需要大量的赋值操作。时间复杂度:最好O(n),最差O(n^2).稳定算法。 /*插入排序 N为数组个数*/ static void InsertSort(int[] M) { int pos=0,temp; for (int i = 1; i < M.length; i+原创 2021-11-09 10:50:47 · 211 阅读 · 0 评论