
蓝桥杯练习
分享一些蓝桥杯真题,和习题练习
Dearlingxx
记录自己的成长历程,欢迎一起讨论进步。
展开
-
蓝桥杯 经典算法题 求解完全背包问题
和01背包基本完全一样。小局部最优的策略也是一样:是否选当前局部的最后一项。唯一的不同点在于物品是无线的导致在表示选择当前物品的状态写法发生了改变:由dp[i-1][j-w[i]]变为了dp[i][j-w[i]]因为这样能够表示最后一件物品选多件的情况。但其实这类题目的关键就在于思考清楚通过已有的值(入门后叫做状态)操作得出小局部最优的策略,然后注意初始值的设置递推得出答案即可。j为0和1的这些情况都小于了物品最的最小重量都只能从i-1得来所以都是0。原创 2024-06-22 03:34:46 · 498 阅读 · 0 评论 -
蓝桥杯 经典算法题 求解01背包问题
本题是非常经典的dp问题,但是如果你是dp入门者dp小白我不建议直接一上来就学习01背包问题,我的建议是先学习leetcode动态规划(基础版)从头开始慢慢领悟这个路线更适合理解动态规划的本质。小局部最优的策略是:选不选最后一个物品?使小局部的价值最大。原创 2024-06-22 03:02:45 · 332 阅读 · 1 评论 -
蓝桥杯 经典算法题 合并排序数组
leetcode上也有这道题一模一样。和归并排序的小过程基本一模一样,只不过因为题目要求只能将arr2中元素合并到arr1中,一种可行的方法是按元素从大到小,顺序从每个序列尾部开始操作,第一填的位置是arr1的尾部,第一个判断的是arr1中有元素的尾部和arr2中有元素的尾部,和归并一模一样的过程构造出一个单调的数组。原创 2024-06-22 00:12:10 · 402 阅读 · 0 评论 -
蓝桥杯 经典算法题 实现归并排序
不断地将数组不断向下平均分为两部分,直到每个子数组中元素数量为1,这样就可以将相邻两个数组长度为1的数组看作是单调数组合并为一个大的单调数组,如此不断向上合并出最终的单调数组。快速排序:将区间分为两个长度未知(与基准值有关)的子区间,其中一个完全小于另一个。归并排序:先向下划分子区间,然后向上操作构造单调性,先有小的再用小的构造出大的。快速排序:先操作构造单调性,再向下划分子区间,一遍从大到小依次操作即可。归并排序:每一步将大区间平均分为两个子区间。在合并时需要格外注意下标地使用。原创 2024-06-21 23:51:07 · 366 阅读 · 0 评论 -
蓝桥杯 经典算法题 实现快速排序
然后一直报错找不到原因,因为当基准值本来因该填在最后一个位置时,x和y都指向序列的末尾,然后下一次调用时范围为(nums.size()-1,nums.size())是一个不合理的区间,这种情况因该停止排序,但是程序无法识别到,所以报错。一个最简单朴素的方法是选择第一个值作为基准值并将第一个位置空出来,然后利用左右指针,当空位在左指针时用右指针找一个小于基准值的值与左指针交换,当空位在右指针时用左指针找一个大于等于基准值的值与左指针交换,知道左右指针重合然后将基准值填到这个位置上即可。原创 2024-06-21 22:57:32 · 520 阅读 · 0 评论 -
蓝桥杯 经典算法题 实现插入排序
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从前向后扫描,找到相应位置并插入。请编写代码,完成 插入排序,对给定数据进行升序排列。原创 2024-06-21 00:48:56 · 109 阅读 · 0 评论 -
蓝桥杯 经典算法题 实现选择排序
但是注意一些细节,每次从前往后查找每个位置应该填的最小的元素时,先存储下标,最后比较完后再交换可以提升效率。选择排序的工作原理是每一次从需要排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排列完毕。请编写代码,完成选择排序,对给定数据进行升序排列。原创 2024-06-21 00:39:17 · 203 阅读 · 1 评论 -
蓝桥杯 经典算法题 A+B问题
输入一行,为用空格分隔的两个正整数 a,b( 1≤a,b≤100 )。无需多言直接计算即可,写这题主要是为了完整性。原创 2024-06-21 00:30:00 · 387 阅读 · 0 评论 -
蓝桥杯 经典算法题 Fizz Buzz 经典问题
也许这道题后面代表着某种经典的思想,但我目前确实不知道,先做出来。原创 2024-06-21 00:25:48 · 372 阅读 · 0 评论 -
蓝桥杯 经典算法题 查找两个总和为特定值的索引
还有一种可行的方案,将数组中每个元素值和它的下标打包,然后根据元素值对打包后对象进行排序,这样就变成了一个经典的递增数组中两数之和问题,用双指针分别指向序列头部和尾部,判断头尾指针的和值与目标值的关系,如果大于目标值向前移动尾指针,如果小于目标值向后移动头指针,否则就找到了,根据题意选择小索引中最小的,然后更新头尾指针下一步指向元素位置最小的值。在这题中看到了leetcode上非常经典的两数之和问题,由此得到了思路,所以题目真的是相通的你做过你就容易有思路,所以没什么神秘的,积累就会越来越强。原创 2024-06-21 00:20:49 · 390 阅读 · 0 评论 -
蓝桥杯 经典算法题 找到给定字符串中的不同字符
因为一定有一个字符不相同,将字符串内部排序然后依次比较,输出新增串中与原串不一样的那一位即可。这里遍历原串和新增串比较,不同输出新增串的这一位即可,如果遍历完了都没有发现不一样,但又因为一定有一个新增的字符所以只能是新增串的最后一个字符。在不考虑字符排列的条件下,对于相差只有一个字符的两个字符串,实现一个算法来识别相差的那个字符。原创 2024-06-20 20:24:03 · 268 阅读 · 0 评论 -
蓝桥杯 经典算法题 反转字符串中的字符
要反转一个区间需要使用reverse()函数,而要交换两个变量的值用swap()函数,swap()函数不能用来反转一个区间内的值。将字符数组的字符进行反转,例如 ['b', ' ', 'a', 'r'] 变成 ['r', 'a', ' ', 'b']。用一个字符串接收传入的字符数组直接将输入的字符串反转输出即可。实现一个算法来实现反转字符数组的功能。如何输入带空格的字符串:使用getline()函数。将字符数组替换为反转后的数组。原创 2024-06-20 20:12:09 · 310 阅读 · 0 评论 -
蓝桥杯 经典算法题 压缩字符串
压缩的格式是将连续相同字符替换为字符 + 数字形式,例如 "AAABCCDDDD" 变为 "A3BC2D4"。需要将字符串中相同字符叠在一起的部分压缩,也就是数出每一堆连在一起的相同字符的数量。需要判断压缩能不能节省空间,仅在压缩后字符串比原字符串长度更短时进行压缩。这道题个人认为和连通块的思想相似:找出每一个联通部分的长度。实现一个算法来压缩一个字符串。原创 2024-06-20 19:59:33 · 479 阅读 · 0 评论 -
蓝桥杯经典算法题 确定字符串是否是另一个的排序
实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。排列的解释如下:如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列。如果 str2 字符串不是 str1 字符串的排列,则输出。如果 str2 字符串是 str1 字符串的排列,则输出。将str1和str2排序,然后比较即可。原创 2024-06-20 19:28:52 · 425 阅读 · 0 评论 -
蓝桥杯经典算法题 确定字符串是否包含唯一字符
用一个字符数组来记录每个字符出现的次数,唯一输出YES,有一个数出现两次时输出NO。一个字符占一字节也就是8位,所以最多可以表示。个字符同时它们使用ASCII码来表示值的范围证号也是0~255,所以可以用一个长度为256的字符数组来记录每个字符出现的次数了。实现一个算法来识别一个字符串的字符是否是唯一的(忽略字母大小写)。原创 2024-06-20 19:21:18 · 737 阅读 · 0 评论