5.30 字节夏令营笔试题目

5.30 字节夏令营笔试题目
A. 题目描述
给定一个定长的字符串,其中包含若干字符,求该字符串中一个连续子串,满足两个条件:
1. 子串包含该字符串中的所有不同的字符
2. 满足条件1中最短的一个(若有多个,则找从左到右第一个出现的子串)
输出用子串的起始下标与长度来表示

输入描述:
输入一个字符串(如abbbaaccb),字符串长度[1, 65535],字符集为单字节ascii码集合

输出描述:
返回最短包含全集的子串,用(起始下标,长度)二元组表示。如果结果不唯一,返回第一个找到的结果。
上述例子中,候选有两个,即abb“baac”cb与abbba“accb”,返回第一个的子串,表示为(3,4)
B. 题目描述
小A和小B在下象棋,经过激烈的对局,两人都只剩下了将和一匹马。此时小A提议,如果小B能计算出在小A不移动棋子且小B的马只能朝右上方移动的情况下,小B的马从原点出发能够顺利取胜的路径数(吃掉小A的将,且在移动的过程中不被小A的马攻击),那么就算小B赢的对局。聪明的你能帮小B赢得对局吗?
马行动的规则:马走日,一直一斜。即马每次行动需进行两个步骤,首先向右或向上移动一格(一直),再沿原移动方向倾斜45度的对角线跳动一次(一斜)。例如,假设马的位置为(0,0),那么马行动一次可以移动到(1,2)或(2,1)。但是,马在直线移动后不能落在一个已有棋子的位置上,否则马将无法沿对角线跳跃。即,当马的位置在(0,0),且(1,0)位置有棋子时,马不能到达(2,1),但可到达(1,2)。

输入描述:
输入四个整数,前两个数表示小A的马的坐标,后两个数表示小A的将的坐标

输出描述:
输出一个整数,表示能够取胜的路径个数

C. 题目描述
某公司想在10月24日为每个人定制一件文化衫。文化衫有D、E、F三种款式。
D[i] 表示编号为 i 的员工收到 D 款式的文化衫时的快乐值。
E[i] 表示编号为 i 的员工收到 E 款式的文化衫时的快乐值。
F[i] 表示编号为 i 的员工收到 F 款式的文化衫时的快乐值。
没有人愿意和自己的直系领导撞衫。
求所有人收到文化衫时的快乐值总和的最大值。

输入描述:
共有 2N 行。
1 行是公司的总人数 N(2 <= N <= 5000)。
2 行到第 N + 1 行描述了员工的快乐值。第 i + 2 行是三个空格分隔的整数:D[i](0 <= D[i] <= 100)、E[i](0 <= E[i] <= 100)、F[i](0 <= F[i] <= 100) 表示编号为 i 的员工收到文化衫时的快乐值。最大的领导的编号为 0
第 N + 2 行到第 2N 行描述了公司的上下级关系。每行有两个空格分隔的整数:A 和 B,表示 A 是 B 直系领导。除大领导之外,每个员工有且只有一个直系领导。

输出描述:
一个整数,快乐值总和的最大值

渣渣一个题都没答对,希望分享给大家,提供点思路。
#笔试题目##字节跳动#
全部评论
第一题双指针扫一遍就可以了 前指针先向前扫直到两个指针之间的子串包含所有字符 然后后指针跟着往前扫逐个删字符 更新答案 第二题bfs从对方的将的位置倒着往前递推 记录每个位置能到达终点的路径数 对于某个位置A如果能从另一个位置B跳过来  那么位置B的路径数就要加上位置A的路径数 不合法的情况包含别马脚和被小A的马踩(小A的马也可能被小A自己的将别马脚) 第三题在树上做dp 对于一个节点A如果所有以A的子节点为根节点的树的总愉悦值都被求出来了 以节点A为根节点的树的总愉悦值就是A的三个颜色里最大的那个 状态转移是 dp[i][s_x]=max(dp[j][p]) j是i的所有子节点 p是所有不等于s_x的状态 从叶子节点倒着往上推就可以了
7 回复 分享
发布于 2021-05-31 10:49
要睡觉了,所以只看了第一题,用滑动窗口应该可以解,首先遍历一遍字符串,统计不同字符的个数count,然后用一个26大小的数组存窗口内的每个字符次数。用另外一个变量cur,存当前窗口的不同字符数量。遍历的时候如果,当前要进入或者滑出的字符,对应次数是0到1,或者1到0才调整cur,只要cur==count就更新结果。感觉行得通,有错误的话,请指正
1 回复 分享
发布于 2021-05-30 23:57
有人面试了吗
1 回复 分享
发布于 2021-06-08 00:15
第一题,完全没思路。 第二题,感觉回溯就可以,但测试用例一直没看明白,我理解的题目意思每次马只能向右上方走,走的步长为(1,2)或(2,1),那马从(2,2)应该无法走到(6,3)这个位置,希望帮忙大神解答下困惑。
点赞 回复 分享
发布于 2021-05-31 08:40
第三题,部分代码如下,只通过了10%的测试用例,自己写了几个例子, 还是没发现问题在哪,希望大家指点。 int val[5000][3], relation[5000]; vector<int> records(5000, -1);     int n;     ll maxHappy = -1, happy = -1;     cin >> n;     for (int i = 0; i < n; ++i)         for (int j = 0; j < 3; ++j)             cin >> val[i][j];     for (int i = 1; i < n; ++i) { // 1-n         int a, b;         cin >> a >> b;         relation[b] = a;     }     for (int j = 0; j < 3; ++j) {         records[0] = j;         happy = val[0][j];         for (int i = 1; i < n; ++i) {             int tmpMax = -1;             for (int k = 0; k < 3; ++k) {                 if (k == j || k == records[relation[i]])                     continue;                                  if (val[i][k] > tmpMax) {                     records[i] = k;                     tmpMax = val[i][k];                 }             }             // printf("%d-%d: %d\n", j, i, tmpMax);             happy += tmpMax;         }         if (happy > maxHappy)             maxHappy = happy;     }
点赞 回复 分享
发布于 2021-05-31 08:43
#第一题python解法不知道对不对 ''' 思路 1、将字符长set成集合提取非重复唯一字符 abbbaaccb->abc? 2、滑窗,left由[0,字符结尾减掉不重复的字符] [0,10-3+1] 因为range左开右闭所以要加1 right由[不重复字符,字符尾] [3,10+1] 3、假设res是全字符串[0,len(str1)],每次滑窗后对滑窗字符串进行set后对比,如果长度(right-left)比res小,则替换 ''' str1 = input() only = set(str1) res = [0,len(str1)] for left in range(len(str1)-len(only)+1): for right in range(left+len(only),len(str1)+1): if left>len(str1)-len(only): break if only == set(str1[left:right]): if res[1] > right - left: res = [left,right-left] break print(res) print(res[1],str1[res[0]:res[0]+res[1]])
点赞 回复 分享
发布于 2021-05-31 10:32
第一题:         char[] chars = s.toCharArray();         //记录不同的字符,并将值置为2         HashMap<Character, Integer> map = new HashMap<>();         for (char aChar : chars) {             map.put(aChar, 2);         }                  int left = 0;         int right = 0;         // 从左往右遍历 直到当前窗口包含所有字符 遍历结束后得到  从左往右最长的字符串         for (int i = 0; i < chars.length; i++) {             // 为2 说明当前字符没有加入当前窗口中 所以加入并将值设为1             if (map.get(chars[i]) == 2) {                 //加入后 当前字符就不必考虑了                 map.put(chars[i], 1);                 //更新右边区间                 right = i;             }         }         // 从右往左遍历 直到当前窗口包含所有字符 遍历结束后得到  从左往右最短的字符串         for (int i = right; i >= 0; i--) {             // 为1 说明当前字符没有加入当前窗口 所以加入并将值设为0             if (map.get(chars[i]) == 1) {                 //加入后 当前字符就不必考虑了                 map.put(chars[i], 0);                 //更新左边区间                 left = i;             }         }         return new int[]{left,right-left+1}; 优化一下,可以提前终止,想不到其他的了,太菜了
点赞 回复 分享
发布于 2021-06-01 11:22
题都没做出来会有面试吗?
点赞 回复 分享
发布于 2021-06-13 16:07
m
点赞 回复 分享
发布于 2021-07-04 01:56

相关推荐

最近又搬回宿舍了,在工位坐不住,写一写秋招起伏不断的心态变化,也算对自己心态的一些思考表演式学习从开始为实习准备的时候就特别焦虑,楼主一开始选择的是cpp后端,但是24届这个方向已经炸了,同时自己又因为本科非92且非科班,所以感到机会更加迷茫。在某天晚上用java写出hello&nbsp;world并失眠一整晚后选择老本行干嵌入式。理想是美好的,现实情况是每天忙但又没有实质性进展,总是在配环境,调工具,顺带还要推科研。而这时候才发现自己一直在表演式学习,徘徊在设想如何展开工作的循环里,导致没有实质性进展。现在看来当时如果把精力专注在动手写而不是两只手端着看教程,基本功或许不会那么差。实习的焦虑5月,楼主...
耶比:哲学上有一个问题,玛丽的房间:玛丽知道眼睛识别色彩的原理知道各种颜色,但是她生活在黑白的房间里,直到有一天玛丽的房门打开了她亲眼看到了颜色,才知道什么是色彩。我现在最大可能的减少对非工作事情的思考,如果有一件事困扰了我, 能解决的我就直接做(去哪里或者和谁吵架等等……),解决不了的我就不想了,每一天都是最年轻的一天,珍惜今天吧
投递比亚迪等公司10个岗位 > 秋招被确诊为…… 牛客创作赏金赛
点赞 评论 收藏
分享
11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
评论
6
44
分享
牛客网
牛客企业服务