![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
编程题目
文章平均质量分 59
这是博主在刷题过程中认为值得有意义的编程题目。
旧巷小新
这个作者很懒,什么都没留下…
展开
-
Leetcode之排序数组查找
文章目录1.在两个长度相等的排序数组中找到上中位数2.在两个长度不等的排序数组中找到中位数1.在两个长度相等的排序数组中找到上中位数题目链接:此题要求如果是偶数返回中间两个数中的前一个。分析:mid1=l1+(r1-l1)/2;mid2=l2+(r2-l2)/2;int offset=((r1-l1+1)&1)^1; //若数量为偶数则offset为1,否则为0;假如arr1[mid1]<arr2[mid2],那么我们要找的目标数是⼀定存在于arr1[mid1+offset]原创 2021-04-05 23:46:44 · 108 阅读 · 0 评论 -
LeetCode之买卖股票的最佳时机序列
文章目录1.买卖股票的最佳时机I2.买卖股票的最佳时机II3.买卖股票的最佳时机III4.1.买卖股票的最佳时机I题目链接2.买卖股票的最佳时机II题目链接3.买卖股票的最佳时机III题目链接4.原创 2021-04-07 10:28:20 · 392 阅读 · 0 评论 -
Leetcode之打家劫舍序列
文章目录1.打家劫舍序列一2.打家劫舍序列二3.打家劫舍序列三1.打家劫舍序列一题目链接思路:该题目是最基本的题目,没有太多的限制,按照基本思路解题即可。核心代码: int rob(vector<int>& nums) { if(nums.size()<=0) return 0; if(nums.size()<=2) return max(nums.front(),nums.back()); vector<int> dp原创 2021-04-06 16:54:45 · 240 阅读 · 0 评论 -
LeetCode之求逆序对
1.树状数组求逆序对的原理:我们知道,树状数组是可以做到单点修改,区间求和的,那我们不妨以数字为下标,每来一个新的数就让他对应数字为下标的数增加一,代表下标在当前已处理的数字中出现的次数;(1)数据的数值较小的时候,我们以数字为下标的话空间复杂度可以满足题目的要求。因此,我们可以直接采用以数字为下标的做法求逆序对。求逆序对的核心代码:for(int i=1;i<=n;i++){ cin>>x; add(x,1); res+=i-getsum(x);}(2)数据的数值较大的原创 2020-10-16 10:08:30 · 692 阅读 · 0 评论 -
LeetCode之寻找矩阵中最长递增子序列
题目:矩阵中最长递增子序列思路:首先这道题应该是拥有最小的子结构的题目,符合动态规划的思想。但是动态规划只适用于循环遍历的方式,而不适合左右上下的搜索方式。因此,我们不能使用动态规划的方法,转而使用深度优先搜索的思想。我们在搜索过程中可以记录已经保存的状态,从而减少后面的计算量,达到优化的效果。...原创 2020-10-26 19:19:24 · 399 阅读 · 0 评论 -
LeetCode之整数拆分
题目链接:整数拆分分析:这道题要求是拆分为至少两个正整数的和,由此可以知道我们该整数的结果可以从这两个整数推导而来,其中这两个整数又分别可以从其他一个或者两个整数得到,以此类推,因此我们可以知道这道题目具有最小的重叠问题,符合动态规划的思想。确定dp数组以及下标的含义:dp[i]=分拆数字i,可以得到的最大乘积为dp[i]。确定递推公式:要想得到dp[i],我们可以直接拆分成两个整数,也就是j * (i - j) 直接相乘,同时我们也可以继续将i-j拆分成更多整数,也就是j*dp[i-j]。我们也可原创 2021-01-14 14:33:32 · 475 阅读 · 0 评论 -
LeetCode之不同的二叉搜素树
题目链接:不同的二叉搜索树声明:本文图片均来自微信公众号代码随想录分析:当n为1或者2的时候,我们是比较容易得到二叉树的种类:当n为3的时候,可以得到下列的二叉树的种类:我们细心可以发现,当3为头结点的时候,其左子树有两个节点,看这两个节点的布局,可以和n为2的时候两棵树的布局也是一样的啊;同理当2为头结点的时候,其左右子树都只有一个节点,布局和n为1的时候只有一棵树的布局也是一样的啊。由此我们可以发现了改题目存在重叠子问题,也就是发现可以通过dp[1] 和 dp[2] 来推导出来dp[3]的某种原创 2021-01-14 14:12:00 · 243 阅读 · 0 评论 -
牛客网之跳石板
这类问题往往需要满足题目中所提出的各种要求,同时求最快或者最慢值。1.题目:跳石板这道题有点类似01背包的问题,到底选还是不选,怎么选。初始化:vector<int> dp(m+1,N); dp[n]=0;分析初始化的合法状态,只有dp[n]才是合法状态,其他的都是非法状态,属于未定义状态。这个初始化有点类似01背包问题恰好装满的情况。状态转移方程:dp[i+j]=min(dp[i+j],dp[i]+1); 其中j为约数。同时,这道题,我们需要注意求约数时进行简化,否则超时。2.原创 2020-08-06 12:15:08 · 284 阅读 · 0 评论 -
牛客网之黑暗的字符串
题目:黑暗的字符串初始化:vector<long long> dp(n+1,0);dp[1]=3;dp[2]=9;所有的状态如果都不符合题目的要求的话,其结果是为0的。状态转移方程:dp[n]=dp[n-1]+2*dp[n-2];不管前面是什么序列,你在第n位至少有两种填法,第n-1,n-2的字母,当第n-1,n-2字母相同时,前面就漏掉了一种填法,即加上一个f(n-2)即可。...原创 2020-10-26 18:16:31 · 101 阅读 · 0 评论 -
牛客网之解码
题目:解码方法分析:这道题是选择一个或者两个的问题。初始化:vector<int> dp(n+1,maxx); dp[0]=0;dp[1]=0;状态转移方程:if(符合条件) dp[i]=dp[i-1]+dp[i-2]; else dp[i]=dp[i-1];原创 2020-10-26 18:13:41 · 170 阅读 · 0 评论 -
牛客网之袋鼠过河
题目:袋鼠过河思路:这道题类似于多重背包问题的01背包解法初始化:vector<int> dp(n+1,N); dp[0]=0;分析初始化的合法状态,只有dp[0]才是合法状态,其他的都是非法状态,属于未定义状态,后面的状态只有从dp[0]迭代出来的,才是合法状态。状态转移方程: dp[j]=min(dp[j],dp[i]+1); 其中j为跳跃的数,同时这道题注意跳跃会超出范围,所以需要注意数组越界问题。参考代码:#include<bits/stdc++.h>using原创 2020-10-26 19:03:30 · 145 阅读 · 0 评论 -
牛客网之路由器
题目:路由器思考:这道题需要频繁地在一定的范围之内加上某个数,符合差分数组的性质。因此,我们可以考虑适用差分数组来解决问题。参考代码:#include<bits/stdc++.h>using namespace std;int main(){ int res=0; int n,k; cin>>n>>k; vector<int> vec(n+2,0); for(int i=1;i<=n;i++){ int x; cin>原创 2020-11-16 16:13:57 · 68 阅读 · 0 评论 -
牛客网之Shopee的办公室
题目:Shopee的办公室分析:这道题的坑点在于数据看起来较小,但是结果用int型会溢出,从而导致结果错误。初始化:for(i=0;i<=x;i++) dp[i][0]=1;for(j=0;j<=y;j++) dp[0][j]=1;状态转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1];//当然这些如果在老板处,方程需要作出修改。参考代码:#include<bits/stdc++.h>using namespace std;int mai原创 2020-10-26 18:05:45 · 264 阅读 · 0 评论 -
蓝桥杯之修改数组
【问题描述】给定一个长度为 N 的数组 A = [A1, A2, · · · AN],数组中有可能有重复出现的整数。现在小明要按以下方法将其修改为没有重复整数的数组。小明会依次修改A2, A3, · · · , AN。当修改 Ai 时,小明会检查 Ai 是否在 A1 ∼ Ai−1 中出现过。如果出现过,则小明会给 Ai 加上 1 ;如果新的 Ai 仍在之前出现过,小明会持续给 Ai 加 1 ,直到 Ai 没有在 A1 ∼ Ai−1 中出现过。当 AN 也经过上述修改之后,显然 A 数组中就没有重复的整数了。原创 2020-11-13 10:08:31 · 836 阅读 · 0 评论 -
蓝桥杯之凑包子数
【题目描述】小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子时,大原创 2020-10-30 11:34:05 · 151 阅读 · 0 评论 -
牛客网之搭积木
题目:搭积木这道题如果把一个值固定好,用另一个值进行比较,我们会发现这是典型的求最长上升子序列的问题的问题。初始化:vector<int> dp(n+1,1);状态转移方程:dp[j]=min(dp[j],dp[i]+1);同时这道题的数据量比较大,因此需要我们结合二分的思想进行解题。参考代码:#include<iostream>#include<algorithm>using namespace std;const int N=1000005;str原创 2020-10-26 19:04:38 · 366 阅读 · 0 评论 -
蓝桥杯之迷宫改编
【题目描述】X星球的一处迷宫游乐场建在某个小山坡上。它是由NxN相互连通的小房间组成的。房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R表示走到右边的房间,U表示走到上坡方向的房间,D表示走到下坡方向的房间。X星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!开始的时候,直升机把NxN名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。请你计算一下,最后,有多少玩家会走出迷宫?而不是在里边兜圈子。【样例输入】10UDDLUU原创 2020-10-28 22:04:40 · 123 阅读 · 0 评论 -
蓝桥杯之蚂蚱跳跃
题目描述:有N+1只盘子,排成1个圆圈。其中N只盘子内装着N只蚱蜢,有一个是空盘。我们把这些蚱蜢顺时针编号为 1~N每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列,并且保持空盘的位置不变(也就是1-N换位,2-N-1换位,…),至少要经过多少次跳跃?。例如N=8的时候,初始情况如下:分析:当N=8的时候,初始状态是012345678,最终的状态是087654321参考代码:#include<bits/stdc原创 2020-10-26 19:42:10 · 607 阅读 · 0 评论 -
蓝桥杯之序列计数
【问题描述】小明想知道,满足以下条件的正整数序列的数量: 1. 第一项为 n; 2. 第二项不超过 n; 3. 从第三项开始,每一项小于前两项的差的绝对值。 请计算,对于给定的 n,有多少种满足条件的序列。【输入格式】 输入一行包含一个整数 n。【输出格式】 输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。【样例输入】4【样例输出】7【样例说明】以下是满足条件的序列:4 14 1 14 1 24 24 2 14 34 4【评测用例规模与约定】原创 2020-10-28 22:10:35 · 441 阅读 · 0 评论 -
蓝桥杯之垒骰子
题目描述:赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。由于方案数可能过多,请输出模 10^9 + 7 的结果。原创 2020-10-27 17:02:40 · 151 阅读 · 0 评论 -
蓝桥杯之分割方格
题目:方格分割思考:如果我们采用对方格进行深度优先搜索的时候,我们是得不到类似 “T” 型格子的,因此,单纯对方格进行深度优先搜索是不正确的,因此,我们可以选择对顶点进行深度优先搜索,同时对该顶点以及对称的顶点进行标记。最后,由于题目要求旋转对称的属于同一种分割法,因此,最后的结果要除以4。参考代码:#include<bits/stdc++.h>using namespace std;int res=0;const int N=7;int dx[4]={0,0,1,-1};int原创 2020-10-26 19:38:23 · 113 阅读 · 0 评论 -
蓝桥杯之算牌型种类
题目:小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?思考:如果直接枚举所有的状态出来的话,这将是2的52次方的问题规模,可见如果按此方法的话一定不能解决问题。因此,我们可以枚举把他们分成13组,每次从中取出一定的数量来解决问题,这将是2的13次方的问题规模,符合要求。参考代码:#include<bi原创 2020-10-26 19:35:59 · 118 阅读 · 0 评论 -
蓝桥杯之青蛙跳杯子
标题:青蛙跳杯子X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。*WWWBBB其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。X星的青蛙很有些癖好,它们只做3个动作之一:1. 跳到相邻的空杯子里。2. 隔着1只其它的青蛙(随便什么颜色)跳到空杯子里。3. 隔着2只其它的青蛙(随便什么颜色)跳到空杯子里。对于上图的局面,只要1步,就可跳成下图局原创 2020-10-30 18:06:16 · 126 阅读 · 0 评论 -
蓝桥杯之不一样的计算
题目描述:思考:我们都知道,这种题目是利用快速幂的方法进行解决,但是n又是一个特别大的数,所以说不能直接采用n进行解决问题,我们需要进一步简化n,根据费马定理应用的第一条(a^b mod p 在b很大的时候可以先用b = b % (p-1)),可以简化为n=n%100.核心代码:#include<bits/stdc++.h>using namespace std;int quickmod(int e,int x,int mod){ int base=e; int res=1; w原创 2020-10-16 11:56:42 · 82 阅读 · 1 评论