直飞面试经历 | Set 16(应用开发者的Pool-Campus)
在 CodeChef 上进行了 90 分钟的编码轮次。您不能在他们的 IDE 中使用自定义测试用例,也不能在运行后编辑您的代码。
配置文件提供应用程序开发人员。在 codechef 环境中练习。
他们在这一轮中选择了 3 名学生,这是一个由印度各地大学组成的游泳池校园。我来自浦那。这一轮实际上是艰难的时间不会足够。那些为他们做竞争性编程的人会有点容易。如果您至少解决了一个问题,您将清除这一轮。
编码问题 1:昂贵的访问
您有一个大小为 N x M 的网格。网格的行从上到下从 1 到 N 编号,网格的列从左到右从 1 到 M 编号。因此,左上角索引为 (1,1),右下角索引为 (N,M)。
访问索引 (i,j) 处的单元的成本由 C[i][j] 表示。在索引 (i,j) 处改变朝向的成本由 P[i][j] 表示。
您必须从单元格 (1,1) 开始并以最低成本到达单元格 (N,M)。在单元格 (1,1),您可以面向“右”或面向“下”。在任何时候,您都可以面对“右”或“下”。
允许进行 2 种类型的移动:
1. 向朝向方向移动一个单元格,即如果您面向“右”,您可以将一个单元格移动到“右”,或者如果您面向“下”,您可以将一个单元格“下”移动。访问小区 (i,j) 的成本将为 C[i][j]。
2. 改变面向的方向,即如果你面向'右',你现在可以面向'下',或者如果你面向'下',你现在可以面向'右'。在单元格 (i,j) 处改变朝向的成本将是 P[i][j]。
找到从 (1,1) 开始后到达 (N,M) 的最小成本。
约束:
1 <= T <= 3
1 <= N,M <= 1000
1 <= C[i][j], P[i][j] <= 1000
输入格式:
每个测试文件的第一行包含 T,即测试用例的数量。
在每个测试用例中,第一行包含两个 inetgers N 和 M 表示网格的尺寸。
接下来的 N 行包含 M 个整数,每个整数表示成本矩阵 C。
接下来的 N 行包含 M 个整数,每个整数表示成本矩阵 P。
输出格式:
对于每个测试用例,输出一行,其中包含从 (1,1) 到达 (N,M) 的最小成本。
例子:
输入:
2
2 2
1 2
3 4
5 6
7 8
2 2
1 2
3 4
5 6
1 8
输出:
13
9
编码问题 2:字符串到数字
您需要将密钥传递给您的朋友,该密钥由所有数字组成,但您不信任运营商。因此,字符串。您提出了一组规则来将字符串映射到原始键。
1.字符串中的每个字符都应该按照规则进行替换。
2. 如果规则的右手边是一个字符,那么这个字符应该再次被替换,直到我们找到一个数字。数字的范围在 1 到 9 之间。
3. 如果找不到这样的数字但检测到循环,则每个这样的字符都应替换为 0。请注意,这包括映射到自身的数字(自循环)。
4、如果没有检测到循环,也没有找到数字替换,你应该输出-1。
5. 如果测试字符串中有字符出现在映射中没有出现,则输出-1。
输入
输入的第一行包含一个整数 T,即测试用例的数量。 T 测试用例将随之而来。每个测试用例都以一个映射开始。映射以数字 N 开头,即规则的数量。然后是 N 行,每一行都以 AB 的形式出现,其中 A 将被 B 替换。然后是一个整数 K,即测试字符串的数量。然后是 K 行,每行包含一个测试字符串。
输出
对于每个测试用例,在第一行打印 # 后跟测试用例编号,然后是每个测试字符串。
解决方案模板
在提供的解决方案模板函数,完成签名为
C / C++
void decode (int n, char orig[26], char mapped[26],
int k,字符输入[32][128],字符输出[32][128])
Java
公共静态无效解码(int n,char[] orig,char[] 映射,
int k,String[] 输入,String[] 输出)
'n' 是映射的数量。 'orig' 和 'mapped' 分别存储原始值和映射值。 “k”是查询的数量。 'inputs' 是编码的字符串。预计您会将答案存储在“输出”中,然后由模板打印。请注意,在Java中,不要分配输出。它将被分配,因此将您的答案放入输出中。
注意:您可以随意编辑代码。添加/删除标题。添加/删除方法。依此类推..只要您的最终代码如上所述解决了输入和输出的问题。您可以提交自己的代码,而无需使用模板。
约束
1 <= T <= 100
1 <= N <= 26
规则的左侧由一个小写字符组成
规则的右侧由单个小写字符或单个非零数字组成。
没有一个字符会映射到一个以上的字符,
即你不能有a 映射到b 和c 的情况。
样本输入
1
10
抗体
公元前
约
德
英夫
f 9
gh
ij
Ĵ 7
kp
3
abcdefij
卡布克
氮杂
样本输出
#1
00099977
-1
-1
解释
字符串1:a、b、c组成一个循环,d映射到e,e映射到f,f映射到9,i映射到j,j映射到7。
字符串 2:k 映射到 p,它没有映射到其他任何东西。因此-1。
字符串 3:字符z 未出现在映射中。因此-1。
编码问题 3:二进制和
在二叉树中,两个叶子节点之间的直径和定义为从一个叶子到另一个叶子时唯一路径中所有节点的总和。假设这棵树是一棵完全二叉树,并且每个叶子节点距树根的深度相同。求二叉树中最大直径和的值。
请注意,最大直径也可能是单个叶节点(因为单个叶节点也是有效直径——从叶节点到其自身的长度为 0 的平凡路径)。
输入
输入的第一行是数字 T,它表示测试用例的数量。
每个案例的输入由 2 行组成。第一行由树中的节点数 N 组成。下面一行由数字 A[1..n] 组成,表示树中每个节点的值。
输入中的第一个元素是树的根元素。考虑以下问题中根元素的索引为 1,输入中第 i 个元素的左孩子是第 (2*i) 个元素,第 i 个元素的右孩子是第 (2*i+1) 个元素。
输出
输出由 T 行组成,表示每个测试用例的二叉树中最大直径总和的值。
解决方案模板
在提供的解决方案模板函数,完成签名为
C / C++
int maxDiameterSum(int 节点,int 树[511])
Java
静态 int maxDiameterSum(int 节点,int [] 树)
maxDiameterSum 的第一个参数是树中的节点数。第二个参数是树,以数组格式呈现,如上面输入部分所述。 maxDiameterSum 应该返回二叉树中最大直径和的值。
注意:您可以随意编辑代码。添加/删除标题。添加/删除方法。依此类推..只要您的最终代码如上所述解决了输入和输出的问题。您可以提交自己的代码,而无需使用模板。
约束
T <= 100
N <= 511
节点的取值范围在 -100000 到 100000 之间
N 的形式为 2k-1,其中 k 是树的高度。
样本输入
1
7
2 4 5 8 -4 3 -6
样本输出
22
解释
在这种情况下获得最大直径总和的路径是
8(叶节点)=> 4 => 2 => 5 => 3(叶节点)
解决方案:
我试图解决,但它没有清除边缘情况。
https://ide.geeksforgeeks.org/ReDZuU
不要记住它。他们会在面试中问你算法,这无济于事。