首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
牛客题解官
获赞
1.5W
粉丝
96.2W
关注
2
看过 TA
6853
男
清华大学
2019
Java
IP属地:北京
牛客题解小达人~
私信
关注
拉黑
举报
举报
确定要拉黑牛客题解官吗?
发布(781)
评论
刷题
收藏
牛客题解官
关注TA,不错过内容更新
关注
2020-06-04 14:41
清华大学 Java
搭积木
题目难度:三星考察点:排序、最长不下降子序列(O(nlogn)) 方法1:排序、动态规划 分析:根据题意,我们可以首先按照长度(或者是宽度)其中之一进行排序,那么我们接下来就只需要想办法将宽度搭积木的层数变得最多就可以了,将其转化为了最长不下降子序列(因为序列中是可以有相等的情况)的问题,我们就可以运用动态规划的思想进行操作。令dp[i]表示以a[i]结尾的最长不下降子序列长度。那么对于第i个来说就有两种可能:(1). 如果存在a[i]之前的元素a[j],使得a[i] >= a[j],那么就把a[i]放在以a[j]结尾的序列后面,找到了一条更长的不下降子序列,此时dp[i] = max...
0
点赞
评论
收藏
分享
2020-07-27 17:29
已编辑
清华大学 Java
获得最多的奖金
题目难度:二星考察点:双指针 方法1:暴力、前缀和 分析:我们按照题意进行计算,枚举第一刀下标i和第二刀的下标j即可,然后判断区间[1, i]和区间[j,n]的和是不是相等,如果相等记录答案,取最大值即可。在计算区间和的时候要注意的是需要提前预处理一下前缀和,要不然直接计算区间和的话会使得时间复杂度变高。 算法实现:(1). 首先用一个数组sum计算前缀和。(2). 枚举切两刀的两个下标i和j,计算区间[1,i]和[j,n]的值,那么区间[1,i]的和显然等于sum[i],区间[j,n]的和则等于sum[n]-sum[j-1],我们只需要判断这两个是否相等即可,相等则记录答案。(3). 输...
0
点赞
评论
收藏
分享
2020-06-04 14:38
清华大学 Java
塔
题目难度:二星考察点:贪心、模拟 方法:贪心、模拟 分析:我们分析一下题意,如果想尽可能的让塔的不稳定性小的话,那么就需要让最高塔高度与最低塔高度的差尽可能低,也就是让最高塔的高度尽可能低,最低塔的高度尽可能高。那么我们每次进行操作的时候就是首先将整个高度数组按照从小到大进行排序,然后高度最大值-1,高度最小值+1。一直循环k次, 在每次进行操作的时候分别记录最大值和最小值即可。还需要注意的一点是如果高度最大值-高度最小值<=1的时候,此时就不需要进行操作了,因为此时操作是完全多余的,而题目让我们求的是最少操作次数。举个例子:就拿样例来说,我们可以进行两次操作:第一次操作:我们首先将高...
0
点赞
评论
收藏
分享
2020-06-04 14:36
清华大学 Java
表达式求值
题目难度:一星考察点:枚举 方法1:枚举 分析:我们将所有的可能情况列举出来然后取得最大值,一共有如下6种情况:(1). ans = a + b + c;(2). ans = a + b * c;(3). ans = a * b + c;(4). ans = a * b * c;(5). ans = a * (b + c);(6). ans = (a + b) * c;输出最大的ans即可。需要注意的一点是:不用进行排序,然后判断最小值,因为给定的a,b,c顺序是一定的!!!举个反例:1, 3, 1如果以最小值判断的话,那么此时表达式的最大值为(1+1)*3,这样是不对的,因为这样改变了数据...
0
点赞
评论
收藏
分享
2020-07-27 17:28
已编辑
清华大学 Java
整理房间
题目难度:三星考察点:计算几何 方法:计算几何、枚举 分析:对于这道题来说我们有如下需要考虑的地方:(1). 一个点A(x1,y1)围绕一个点B(x2,y2)逆时针旋转90°一次,对应坐标A的变化?旋转多次呢?我们都知道如果B是原点的话,那么逆时针旋转90°一次之后坐标A(x1,y1)将变为C(y1, x1),那么如果B不是原点呢?我们将整个坐标系进行移动,将B移动到原点,那么A的坐标就会变为(x1-x2,y1-y2),那么此时进行逆时针旋转90°,A的坐标就会变为C(y1-y2,x1-x2)。注意,此时C的坐标是相对于B点来说的,如果相对于原点来说的话,就变成D(y1-y2+x2,x1-x...
0
点赞
评论
收藏
分享
2020-07-27 17:28
已编辑
清华大学 Java
丰收
题目难度:二星考察点:前缀和、二分 方法1:暴力算法 分析:对于的每个询问x,我们从1到n遍历整个数组,期间计算加和sum,直到在第i堆苹果满足x>=sum的时候,此时x属于第i堆苹果,输出即可。 算法实现:(0). 输入每堆对应的苹果数,用数组记录一下。(1). 对于查询的x,从第1堆开始遍历,sum表示前i堆的苹果数之和,如果sum>=x,就输出i(属于第i堆) 复杂度分析:时间复杂度:O(n^2)空间复杂度:O(n) 代码: #include <bits/stdc++.h> using namespace std; const int MAXN = 1e5+...
0
点赞
评论
收藏
分享
2020-06-04 14:30
清华大学 Java
瞌睡
题目难度:二星考察点:贪心、前缀和 方法1:暴力算法 分析:我们首先可以通过一次遍历获取小易醒着时所获得的知识点分值,即时所获得的分值,由于题目要求我们只需要进行一次叫醒活动,那么我们就选择当前小易是睡着即的时刻进行往后k个枚举,循环n次即可,然后每次枚举判断其是否为知识点分的最大值。 算法实现:(0). 首先计算小易清醒时所能获得的知识点分值,记作tot。c(1). 然后从i到n进行遍历,当小易睡着时即b[i]=0时,j从i时刻一直枚举到i+k-1时刻,如果中间还有b[j]=0的情况,那么就记录加和知识点,即将时刻区间[i,i+k-1]种b[i]=0的知识点相加,然后在加上之前的清醒时的...
0
点赞
评论
收藏
分享
2020-06-04 14:28
已编辑
清华大学 Java
俄罗斯方块
题目难度:一星考察点:模拟、计数 方法:模拟、计数 分析:由于整个屏幕有n列,那么如果想要得分的话就要从第1列到第n列都要有值才能得分,那么我们只需要对每个方块落在第几列进行计数,然后从第1列一直循环到第n列,判断哪列的计数值最小,最小值就是答案,输出即可。举个例子:3 61 2 3 1 1 2上例表示一共有三列,6个1*1的方块,那么我们统计一下每一列的方块数:第一列:有3个(数字1有三个)第二列:有2个(数字2有二个)第三列:有1个(数字3有一个)所以以每列的个数最小值为最终答案,即小易能够得1分。 算法实现:(0). 输入x,用一个数组用来计数a[x]++(1). 从第1列遍历到第n...
0
点赞
评论
收藏
分享
2020-06-04 14:19
清华大学 Java
牛牛的背包问题
题目难度:三星考察点:二进制枚举、中途相遇法 方法1:暴力二进制枚举 分析:每个零食有放和不放两种情况,那么对于n个零食来说就有2^n种情况,我们对于这2^n种情况挨个判断每种情况的体积数是否超过背包容量w,如果没有超过背包容量就记录答案。Tips:注意结果用long long 算法实现:(0). 首先计算全部的状态all=(1<<n)。(1). 遍历这all种状态(2). 对于每种状态计算当前的体积值,如果体积值<=w,记录结果ans++(3). 输出结果 复杂度分析:时间复杂度:O(n*2^n)空间复杂度:O(n) 代码: #include <bits/std...
0
点赞
评论
收藏
分享
2020-07-27 17:28
已编辑
清华大学 Java
牛牛的闹钟
题目难度:二星考察点:模拟 方法:模拟 分析:按照题意模拟,然后将出现的时间全部转化为数字,上课时间-路上耽误的时间=最晚起床时间,然后根据闹钟的时间早晚找到最晚起床时间,如果将闹钟时间转化为分钟数的值小于等于最晚起床时间转化为的分钟数,那么此时这个闹钟就可以作为起床时间可用,然后找到最晚的闹钟时间。 算法实现:(0). 对于题目中所出现的时间概念,全部转化为分钟表示的数字,数字越小代表的时间越早,数字越大表示时间越晚,例如:A时B分可以转化为data = A*60+B。(1). 那么我们就可以遍历闹钟序列,然后判断是否满足如果从当前闹钟开始需要x分钟到达教室不迟到的条件(2). 如果满足...
0
点赞
评论
收藏
分享
2020-07-27 17:28
已编辑
清华大学 Java
矩形重叠
题目难度:三星考察点:枚举、几何 方法:枚举 分析:注意一点题目要求的是平面内重叠矩形数量最多的地方,有多少个矩形相互重叠?那么对于这个题目来说,正常的循环遍历方法是无法轻易解决的,那么我们换种方法,我们想办法将这n个矩形所包含的点全部枚举出来,然后在检查看有多少个矩形包含这个点,输出包含点最多的矩形个数值即可。举个例子:现在有两个矩形,第一个矩形的左下角坐标为(0,0)右上角坐标为(6,6),第二个矩形的左下角坐标为(5,5)右上角坐标为(10,10),那么我们将这两个矩形所包含的点列举出来:{(0,0),(0,5),(0,6),(0,10),(5,0),(5,5),(5,6),(5,10...
0
点赞
评论
收藏
分享
2020-07-27 17:27
已编辑
清华大学 Java
数对
题目难度:三星考察点:数学、枚举 方法1:暴力算法 分析:从1-n挨个枚举x,y,对于每个数对(x,y)判断是否x%y>=k,如果满足条件结果ans++,最后输出ans即可。 复杂度分析:时间复杂度:O(n^2)空间复杂度:O(1) 代码:#include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { int n, k; cin>>n>>k; int ans = 0; for(int x=1; x<=n; x++) { for(int y=1; y...
0
点赞
评论
收藏
分享
2020-07-27 17:27
已编辑
清华大学 Java
迷路的牛牛
题目难度:一星考察点:模拟 方法:模拟 分析:按照题意模拟即可,判断向左走了多少步,向右走了多少步,然后得出向左向右走的步数的差值,然后对4进行取模,为什么对4取模呢?是因为一共有NSWE四个方向,所以需要对4取模,如果取模之后得到的结果ans是负数,那么ans=ans+4,因为向右走了1步等价于向左走了三步,然后根据相差的步数来判断到底是哪个方向,为了方便记录向左ans++,向右ans--: 算法实现:(0). 遍历字符串s,然后如果当前字符为'L',那么ans++,否则ans--。(1). 将ans对4取模,保证ans最后为区间属于[0,3]。(2). 判断最后牛牛面向的方向:如果an...
0
点赞
评论
收藏
分享
2020-07-27 17:27
已编辑
清华大学 Java
安置路灯
题目难度:二星考察点:贪心 分析:对于这道题来说,如果在第i个位置上安装路灯,那么它能够照亮的地方就是i-1, i和i+1,那么安装路灯最少的方法就是在三个位置的中间设置路灯,即如果第i个位置为'.', 那么显然在 i+1 处安装路灯是最好的,它可以照到位置i, i+1和i+2,这样能够最大程度的减少路灯的数目。例如下图:算法实现:(1) 设置遍历指针i=0;(2) 如果第i个位置为'.',ans++(在i+1处放置路灯,可以照亮i, i+1, i+2),然后从第i+3位置处继续遍历,即i=i+3;(3) 如果第i个位置为'x',那么指针i++。(4) 一直遍历字符串末尾结束,最后输出ans...
0
点赞
评论
收藏
分享
2020-07-27 17:25
已编辑
清华大学 Java
被3整除
题目难度:二星考察点:找规律简要说明:这是一道找规律的题目,只要我们发现其中的规律,题目也就迎刃而解。 分析: 对于这道题来说,我们肯定不能直接从l到r遍历一遍,然后对于每个数判断是否能够被3整除,这样的复杂度太高,因为数据范围是10^9,所以我们考虑找规律,打表如下:1%3 =====> 112%3 =====> 0123%3 =====> 01234%3 =====> 112345%3 =====> 0123456%3 =====> 0那么我们发现从1开始,每隔3个数就有两个数%3=0,那么从[1,x]区间有多少能被3整除的数呢?答案显然为 f(x)=...
0
点赞
评论
收藏
分享
1
46
47
48
49
50
53
创作者周榜
更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务