4.12字节跳动四道题题解


A题:从左往后找到第一个b[i]-a[i]非零的位置,从右往左一样,然后查这个区间内是否b[i]-a[i]完全一致并且大于等于0.
B题:dp[i][j]表示将棍子i切割成j份的信息簇(结构体),里面存储切成j份后所有棍子的最大值和最小值,要保证最大值尽可能小,最小值尽可能大,同时初始化一个切割次数cost=j。然后n^2循环,对于第i根棍,我们要在第i-1根棍的所有方案中找到满足dp[i-1][j].maxx<=dp[i][j].minn的所有cost,然后去最小值加到dp[i][j].cost中。这个可以用两个指针来求,因为可以知道对于第i根棍,j递增,则maxx,minn递减。
C题:将所有数据保存到一个结构体中,用flag标记分类,根据价格排序,然后for循环分情况求即可,如果是flag=0更新当前优惠券最大值,否则当前值减去优惠券最大值几位花费。这样就可以直接求出来答案。
D题:单调栈模板题。
(最后一分钟做完了。。。太惊险了)
我的代码由于某些原因未保存,只能让各位看看题解了。
-------update-------

HINT : 以下样例部分为自己原创,非题目所给样例。

A题

给你两个长度相等的数组,问是否能够在数组a中找到一个区间,将区间内的所有数字均加上,可以将数组变为数组

样例输入 
5 
1 1 1 1 1 
1 2 2 2 1
样例输出 
YES
样例输入 
5 
1 1 1 1 1 
1 2 1 2 1
样例输出 
NO

暴力即可,从前往后找到第一个的位置,同理从后往前找位置,那么只需要判断区间是否完全相等且不小于0即可。复杂度

B题

给你根长为小木棍排成一列,现在你可以进行如下操作: 将某根小木棍折成两份,每份长度均为整数,然后将其放回原位置,此时一共有根小木棍。 问在最少经过多少次重复操作后,可以使得所有的小木棍长度非递减排列。

样例输入 
3 
4 9 4
样例输出 
3
样例解释 
4 9 4 -> 2 2 3 3 3 4

表示将棍子切割成份的信息簇(结构体),里面存储切成份后所有棍子的最大值和最小值,要保证最大值尽可能小,最小值尽可能大。同时初始化一个切割次数。然后循环,对于第根棍,我们要在第根棍的所有方案中找到满足的所有,然后去最小值加到中。这个可以用两个指针来求,因为可以知道对于第根棍,递增,则递减。 复杂度

C题

给你张优惠券,每张优惠券均有一个金额,可以无条件无限次使用。现有件商品,每件商品可使用一次优惠券,并且使用的优惠券的金额必须不超过商品金额,问最少需要多少钱才能够买下所有商品。

样例输入 
3 4 
50 100 200 
99 199 200 300
样例输出 
248
样例解释 
(99-50)+(199-100)+(200-200)+(300-200)=248

结构体存下所有商品,按照优惠券和商品进行标记,然后按照金额大小进行排序。

接下来循环,如果当前物品是优惠券,那么就更新当前可用优惠券的最大值(初始为0),否则当前物品为商品,那么买下它所需要的花费即为其价格减去可用优惠券最大值。复杂度

D题

现有个房子排成一排,每个房子有个高度从每个房子上向左向右看,可以看到高度不超过自己的房子,如果遇到高度超过自己的房子,那么该房子后面的房子也将被阻挡住无法看见。问从每个房子向左向右看,能看到的房子的最大数量为多少。

样例输入 
4 
1 4 3 3
样例输出 
0 3 2 2

单调栈裸题,从前向后扫一遍,从后向前扫一遍,然后输出结果即可。复杂度


#字节跳动春招##字节跳动##笔试题目#
全部评论
我也刚刚笔试完,第一题做完了,第二题和第三题是栈,第四题是图。 但是我只有第一题AC,第二三感觉思路没问题啊,但是一直没AC,可能因为考试太紧张了,没改成bug,刚刚考完了我线下编辑了几次,发现一个是range里面写错了,一个是没看到题目的某个条件,真的要哭了,第四题思路有了但是第二题第三题的bug耗太久了,第四图我思路都想好了,但是没有第一时间想到如何将数组转化成图的结构就没写。用的牛客的编译器一开始还不知道怎么输入。。哭了,后来电脑卡死了一次,因为是机房的电脑,但是后来用笔记本上就没问题了。欸。。 leetcode做题很多,但是一直做的都是链表和树,图真的当时没想起来怎么解,就一直耗23题,不知道能不能过。。
点赞 回复
分享
发布于 2020-04-12 23:35
第二题我没想到这种动态规划,3.4题时间超了,我还是太菜了,哎。
点赞 回复
分享
发布于 2020-04-13 00:02
联易融
校招火热招聘中
官网直投

相关推荐

5 8 评论
分享
牛客网
牛客企业服务