有趣的OJ
文章平均质量分 78
本人自学C++有一段时间了,却发现自己的代码能力提升比较慢,所以开设了这个专栏,进行练习,与大家共同探讨题目的最优解,有哪个大佬看到题目有最优解,请留言,非常感谢。
凌星An
1
展开
-
[蓝桥杯] 基础练习 完美的代价
问题描述问题描述回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda 第二次交换 md : madma第三次交换 ma : madam (回文!完美!)输入格式第一行是一个整数N,表示接下来的字符串的长度(N <= 8000) 第二行是一个字符串,长度为N.原创 2022-01-01 20:39:46 · 183 阅读 · 3 评论 -
[蓝桥杯]格子刷漆
问题描述: X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!) 比如:a d b c e f 就是合格的刷漆顺序。 c e f d a b 是另一种合适的方案。 当已知 N 时,求总的方案数。当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模。...原创 2021-06-21 10:29:58 · 294 阅读 · 2 评论 -
[蓝桥杯]第十一届决赛B组试题解析
文章目录A 美丽的2题解:代码题目链接:B 扩散题解:代码:题目链接:C 阶乘约数题解:代码:题目链接:D 本质上升序列题解:代码:题目链接:E 玩具蛇题解:代码:题目链接:A 美丽的2题目描述:本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。小蓝特别喜欢 22,今年是公元 2020 年,他特别高兴。 他很好奇,在公元 1年到公元 2020年(包含)中,有多少个年份的数位中包含数字 22?题解:本题是比较简单的一道题,即让我们1~2020这些数字中,哪些数字上包含2,犹如原创 2021-05-26 22:32:01 · 1601 阅读 · 8 评论 -
[广度优先搜索]二叉树的层序遍历
前提: 首先我们要达成一个共识,进行二叉树的层序遍历的方法叫做广度优先搜索,是使用了队列这个数据结构来实现的题目:1.二叉树的层序遍历 给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。层序遍历结果为 3 9 20 15 7思路:我们先将根节点入队,如果队列不为空,取队首元素,如果该元素左子树不为空,入队,如果该元素右子树不为空,入队;直至队列位空,层序遍历完毕;代码:给定一个...原创 2021-04-22 15:19:07 · 677 阅读 · 0 评论 -
[动态规划](烦人的背包)背包问题
文章目录背包问题:思路:动态规划:代码:代码优化:[背包问题 II](https://www.lintcode.com/problem/125/)思路:代码[背包问题 III](https://www.lintcode.com/problem/440/)思路:代码:[背包问题 IV](https://www.lintcode.com/problem/562/)思路:代码:[背包问题 V](https://www.lintcode.com/problem/563/)思路背包问题:描述在n个物品中挑选若原创 2021-04-16 12:56:43 · 263 阅读 · 0 评论 -
[力扣]最长不含重复字符的子字符串[滑动窗口]
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zui-ch...原创 2021-03-16 16:19:06 · 187 阅读 · 0 评论 -
[力扣]只有两个键的键盘
题目:最初在一个记事本上只有一个字符 'A'。你每次可以对这个记事本进行两种操作:Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的)。Paste (粘贴) : 你可以粘贴你上一次复制的字符。给定一个数字n。你需要使用最少的操作次数,在记事本中打印出恰好n个 'A'。输出能够打印出n个 'A' 的最少操作次数。示例 1:输入: 3输出: 3解释:最初, 我们只有一个字符 'A'。第 1 步, 我们使用 Copy All 操作。...原创 2021-03-16 15:28:42 · 296 阅读 · 0 评论 -
[蓝桥杯]拦截导弹
题目、思路: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。输入格式 一行,为导弹依次飞来的高度输出格式.原创 2021-03-01 19:02:02 · 1132 阅读 · 0 评论 -
[蓝桥杯]试题 算法提高 第二点五个不高兴的小明
问题描述 有一条长为n的走廊,小明站在走廊的一端,每次可以跳过不超过p格,每格都有一个权值wi。 小明要从一端跳到另一端,不能回跳,正好跳t次,请问他跳过的方格的权值和最大是多少?输入格式 输入的第一行包含两个整数n, p, t,表示走廊的长度,小明每次跳跃的最长距离和小明跳的次数。 接下来n个整数,表示走廊每个位置的权值。输出格式 输出一个整数。表示小明跳过的方格的权值和的最大值。样例输入8 5 33 4 -1 -100 1 8 7 6样例输出12.原创 2021-02-16 18:33:31 · 1088 阅读 · 8 评论 -
深刻了解广度、深度优先搜索和回溯----广度深度题集
员工的重要性:给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度和 直系下属的id。比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结构中。现在输入一个公司的所有员工信息,以及单个员工id,返回这个员工和他所有下属的重要度之和..原创 2021-01-04 23:09:50 · 248 阅读 · 0 评论 -
搜索算法----烦人的岛屿问题
岛屿的周长给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。示例 1:输入:g.原创 2021-01-04 21:54:49 · 315 阅读 · 0 评论 -
动态规划:最长子序列
最长公共子序列:链接:https://www.nowcoder.com/questionTerminal/9ae56e5bdf4f480387df781671db5172题目:我们有两个字符串m和n,如果它们的子串a和b内容相同,则称a和b是m和n的公共子序列。子串中的字符不一定在原字符串中连续。例如字符串“abcfbc”和“abfcab”,其中“abc”同时出现在两个字符串中,因此“abc”是它们的公共子序列。此外,“ab”、“af”等都是它们的字串。现在给你两个任意字符串(不包含空格),请.原创 2020-11-26 17:57:02 · 746 阅读 · 0 评论 -
字符串计数
题目:求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。输入:每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)题解:我们以"abcdef abcdefg 2 7"这一组输入为例;我们要求解第2位到第7位字典序在s1和s2之间的字符串个数,但是由于两个字符串的前六位都相同,所以我们只需要考虑第七位;故输出结果,字符串个数为5; abcd...原创 2020-11-24 17:19:34 · 1017 阅读 · 0 评论 -
错排公式和练习
当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推。第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法;第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法;综上得到 M(n)=(n-1)[M(n-2)+M(n-...原创 2020-11-03 17:57:31 · 122 阅读 · 0 评论 -
Levenshtein 距离:字符串之间的距离,理解动态规划
题目:Levenshtein距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。给定任意两个字符串,写出一个算法计算它们的编辑距离,如果成功计算出字符串的距离,否则返回-1;eg:字符串A:abcdefg字符串B:abcdef通过增加或是删掉字符”g”的方式达到目的。这两种方案都需要一次操作。把这个操作所需要的次数定义为两个字符串的距离。题解:这道题我们采...原创 2020-07-05 14:49:26 · 621 阅读 · 0 评论 -
智力数学题:猴子分桃
题目:老猴子辛苦了一辈子,给那群小猴子们留下了一笔巨大的财富——一大堆桃子。老猴子决定把这些桃子分给小猴子。第一个猴子来了,它把桃子分成五堆,五堆一样多,但还多出一个。它把剩下的一个留给老猴子,自己拿走其中的一堆。第二个猴子来了,它把桃子分成五堆,五堆一样多,但又多出一个。它把多出的一个留给老猴子,自己拿走其中的一堆。后来的小猴子都如此照办。最后剩下的桃子全部留给老猴子。这里有n只小猴子,请你写个程序计算一下在开始时至少有多少个桃子,以及最后老猴子最少能得到几个桃子。思路:每次小猴子原创 2020-07-02 16:32:55 · 5303 阅读 · 1 评论 -
字符串的匹配问题
题目:问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求: 实现如下2个通配符: *:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同) ?:匹配1个字符 输入: 通配符表达式; 一组字符串。 输出: 返回匹配的结果,正确输出true,错误输出false 题解:当两个字符匹配的时候,我们直接下一次匹配;当两个字符不匹配的时候,并且通配符串该字...原创 2020-06-25 11:15:43 · 1471 阅读 · 0 评论 -
贪心,初次见面礼:手套问题
题目:在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26,且一定存在至少一种.原创 2020-06-23 16:07:00 · 379 阅读 · 0 评论 -
不用比较找出两个数比较大的数
题目:给定32位的两个正数a和b,不作任何比较,返回a和b中较大的那个数不用任何比较看到这个题目,我的脑中真的是正文:我们通常怎么比较两个数的大小呢?c=a-b 若c<0则a>b 若c>0 则a<b 若c=0则a=b那怎么用c语言表示呢?我们知道3...原创 2020-05-18 18:08:51 · 322 阅读 · 0 评论 -
不使用额外变量交换两个变量的值
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。(numbers.length = 2)示例:输入: numbers = [1,2]输出: [2,1]即我们熟悉的题目:不适用额外的变量交换a、b两数的值。而解决这个题目,我们只需要三行代码a=a^b;b=a^b;a=a^b;然而这三行代码是什么意思呢?让我们慢慢领略。首...原创 2020-04-24 11:32:57 · 606 阅读 · 0 评论 -
不常见的:走格子问题
题目:请编写一个函数(允许增加子函数),计算nxm的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。输入输出:输入描述: 输入两个正整数n ,m输出描述: 返回结果题解:这道题从左上角到右下角,不是走格子,而是选择边缘线,这个比较特殊,我们只能尝试找一下规律。当只有一个格子的时候(n=1,m=1) ...原创 2020-06-17 13:50:21 · 598 阅读 · 0 评论 -
bad lucky :幸运的袋子
题目:一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。输入输出:输入:第一行输入一个正整数n(n ≤ 1.原创 2020-06-16 14:13:27 · 535 阅读 · 1 评论 -
头疼的动态规划:跳木板
题目:小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6->8->12->18->24于是小易最少需要跳跃5次,就可以从4号石板跳到.原创 2020-06-15 13:29:32 · 268 阅读 · 0 评论 -
不一样又不一样的:木板接水
题目:空地上竖立着n个从左到右排列的木板,它们可以把水挡住,但溢出最边上木板的水将会流到空地上。已知木板间距都是单位1,现给定每个木板的高度,请求出总共能接住的水量?说明一点,这里只考虑间距(宽度)和高度,不考虑第三个维度,因此水量是平方单位。木板高度分别是2,1,3,那么我们可以接住2*2=4平方单位的水,如下图所示。注意,中间那个木板被水淹没了。木板高度分别是2,4,3,那么可以接住2*1+3*1=5平方单位的水,如下图所示。输入:第一行一个正整数T..原创 2020-06-13 19:02:38 · 572 阅读 · 0 评论 -
单调栈问题:接雨水,每日温度
接雨水:给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6解题思路:我们在此处需要栈这个容器;首先我们解析一下题目:我们先放入一个柱子入栈,如果在此放入的柱子高度比栈顶的柱子低,就可以存水,因此入栈。如果如果在此放入的柱..原创 2020-06-11 14:31:18 · 336 阅读 · 0 评论 -
有点二的 不要二 问题
二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述:每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)输出描述:输出一个最多可以放的蛋糕数思路:.原创 2020-06-10 11:48:32 · 235 阅读 · 2 评论 -
树:寻找最近的公共祖先
前引:树可以分为好几种:普通树,二叉树(二叉链,三叉链),二叉搜索树等等,今天我们,讨论的的问题可就和就几种树有关。我们先易后难,讨论二叉搜索树!且所有的输入满足所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的树中。二叉搜索树篇:题解:由于二叉搜索树是有序的,左子树全部小于根节点,右子树全部大于根节点。倘若我们要查找p,q节点的公共祖先。其中根节点的值等于p节点的值或者等于q节点的值,根就是我们要查找的公共祖先。例如:p为5,q为2;当我们查...原创 2020-06-08 13:37:32 · 1714 阅读 · 1 评论 -
二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。输入:输出:双向链表的头结点head这道题的思路不太困难;我们知道二叉搜索树的中序遍历会得到升序的结果,所以转换为有序的链表我们需要进行中序遍历;但由于是双向链表我们需要一个节点保存我们正在遍历的节点的前一次遍历节点信息,以便形成双向链表!代码实现: void Inorder(Node* cur,Node*& prev,Node*&am...原创 2020-06-07 19:31:32 · 113 阅读 · 0 评论 -
小有偏差:组队竞速
【组队竞赛】牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现 队伍的水平值等于该队伍队员中第二高水平值。 例如: 输入:25 2 8 5 1 5 输出 :10一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2 为了...原创 2020-06-06 19:17:24 · 129 阅读 · 0 评论 -
啰嗦的代码:排序子序列
牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.输入:61 2 3 2 2 1如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2题解:其实这道题简单明了,思路也比较容易。a[ i] <a[i+1],即后一个数大于前一个数,则属于非递减.原创 2020-06-06 18:34:43 · 244 阅读 · 0 评论 -
想都没想到的动态规划:猜数字游戏
牛牛和羊羊在玩一个有趣的猜数游戏。在这个游戏中,牛牛玩家选择一个正整数,羊羊根据已给的提示猜这个数字。第i个提示是"Y"或者"N",表示牛牛选择的数是否是i的倍数。例如,如果提示是"YYNYY",它表示这个数使1,2,4,5的倍数,但不是3的倍数。注意到一些提示会出现错误。例如: 提示"NYYY"是错误的,因为所有的整数都是1的倍数,所以起始元素肯定不会是"N"。此外,例如"YNNY"的提示也是错误的,因为结果不可能是4的倍数但不是2的倍数。现在给出一个整数n,表示已给的提示的长度。请计算出长度.原创 2020-06-05 13:05:31 · 662 阅读 · 0 评论 -
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述:输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。输出描述:为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)解题思路:参考自己手动转换的方式。给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数,我们只需要用M/N,可以得到一个商和余数;在用商/N,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为N进制数的低位有效位,后得到的余数作.原创 2020-06-04 10:08:02 · 2988 阅读 · 2 评论