❤️TikTok字节跳动编程题实战2022校招 | 您所在的位置:网站首页 › 字节跳动的四轮面试 › ❤️TikTok字节跳动编程题实战2022校招 |
❤️TikTok字节跳动编程题实战2022校招——吐血分享总结。
前言+说明一、算法编程题(种树)二、算法编程题(小A的吃鸡之旅)三、算法编程题(有序最大K位数)四、算法编程题(测试计划的最大成功率)
前言+说明
❤️旺仔兄弟们!这个是字节跳动2022届校招生笔试,总共四道编程题! 如果觉得博主分享的不错,希望能留下您的一键❤️三连❤️(点赞+评论+收藏) ,您的支持就是我前进的动力❤️,您的三连对我特别重要。 注明:下述题目只用于学习交流所用,禁止用于商业销售。同时在题解方面也希望大家能提出宝贵建议,共同进步❤️!❤️此次博文受益于大神“英雄哪里出来”的启发和指点,加了下面文章中的动图。❤️大神“英雄哪里出来”的算法题图解很漂亮,特别推荐!❤️ 一、算法编程题(种树)时间限制: 3000MS 内存限制: 1048576KB 题目描述: 每年的3月12日是我国的植树节,为了保证树苗的存活率,栽种每颗树苗都需要有一定的间隔,即不能种植在相邻的土地上,否则会发生争夺养分而导致树苗枯萎。你作为一名爱护坏境的Bytedancer分到了一块长度为n乘1的土地,即由n块地组成的一个数组,其中如果种了树的地块用“B”表示,没有种树的地块用“Y”表示,每个地块最多只能种一颗树苗,并且没有相邻地块种了树苗。请你计算出最多还能种多少棵树? 输入描述 第一行输入一个正整数N代表数组大小 1 ≤ N ≤ 10000。 第二行输入数组 bytetreed,其中bytetreed[i] 为 B 或 Y 输出描述 非负整数 示例1 输入: 5 B Y Y Y B 输出 1 示例2 输入: 4 Y Y Y B 输出 1 规则 请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果,点击“调试”亦可保持代码 本编程题不可以使用本地编译器 解题思路: 一、能种树的空缺位置为奇数个时: 如下图:索引i = 0~14,可种树的索引范围为0 ~ 2、6 ~ 8、12 ~ 14,每段都有3个位置可选。 参考代码: import java.util.Scanner; public class TikTok_Test01 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); String[] arrs = sc.nextLine().split(" "); int ans = plant(arrs); System.out.println(ans); } public static int plant(String[] arrs){ int ans = 0; int n = arrs.length; int temp = -1; for (int i=0; i if (temp //temp与i之间最多能种的树位置范围为:i-temp-3; //当i-temp-3为奇数时,能种树的数目为:(i-temp-2)/2; //当i-temp-3为偶数时,能种树的数目为:(i-temp-3)/2; //在整数运算中,i-temp-3为偶数时,(i-temp-3)/2=(i-temp-2)/2 ans += (i-temp-2)/2; } //存下种了树的位置索引 temp = i; } } if (temp //在temp之后都是空位,最右边的空位置 ans += (n-temp-1)/2; } return ans; } } 二、算法编程题(小A的吃鸡之旅) 时间限制: 2000MS 内存限制: 524288KB 题目描述: 众所周知,小A不管玩什么游戏都很菜,总是拖队伍的后腿。在小A和朋友组队开黑一款跳伞吃鸡大逃杀游戏的时候,他总是到处乱闯,顺便开枪,帮对面反向吃鸡。为了带领小A赢下游戏,体会到吃鸡的快感,小A的队友们不得己卸下了小A的武器,让小A在房间里好好地“狗着”,其他人出去搜索物资。可小A一点也不老实,总在窗户晃悠,不仅被轰炸得只剩了一丝血,还因此引来窗外狙击手的注意。 输入第一行包含一个正整数n(1 ≤ n ≤ 1000),代表有n行输入。 接下来n行每行给出子弹射入的角度θ(0 ≤ θ ≤ π 且 θ ≠ π / 2)的tan值,请你判断每次射击小A能否存活下来。 输出描述 如果一颗子弹未击中小A或者击中平底锅,请在一行内输出“YES”,否则,输出“NO”。 示例1 输入: 3 0 0.8 999.9999 输出 YES YES NO 备注 浮点数精度控制在1e-6即可。 规则 请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果,点击“调试”亦可保持代码 本编程题不可以使用本地编译器 解题思路: 采用分类并递归的方式:(大神说这是会让面试官晕倒的方法)。 【参数解释:】 顺时针方向为正 @param x 子弹与墙面相交的横坐标 @param y 子弹与墙面相交的纵坐标 @param tanh 子弹与墙面的夹角 @param n 子弹的反弹次数,初始为0 @return 是否击中小A 1、当x=0时,表示在左侧墙面。 (1.1)当tanh > 0时有以下情形 (1.1.1)打中底侧墙面: ①重置x,y,n和tanh的值:x=y×tanh、y=0、tanh=1/tanh和n=n+1。 ②递归调用此方法 (1.1.2)打中小A,直接返回值true。 (1.1.3)打中平底锅,直接返回值false。 (1.1.4)打中右侧墙面: ①重置x,y,n和tanh的值:x=6、y=y-6/tanh、tanh=-tanh和n=n+1。 ②递归调用判断方法 (1.2)当tanh < 0时有以下情形 (1.2.1)打中顶侧墙面: ①重置x,y,n和tanh的值:x=-(6-y)×tanh、y=6、tanh=1/tanh和n=n+1。 ②递归调用此方法 (1.2.2)打中小A,直接返回值true。 (1.2.3)打中平底锅,直接返回值false。 (1.2.4)打中右侧墙面: ①重置x,y,n和tanh的值:x=6、y=y-6/tanh、tanh=-tanh和n=n+1。 ②递归调用判断方法 (1.3)当tanh = 0时,返回false。 2、当y=0时,表示在底侧墙面。 与1同理。 3、当x=6时,表示在右侧墙面。 与1同理。 4、当y=6时,表示在顶侧墙面。 与1同理。 三、算法编程题(有序最大K位数)时间限制: 2000MS 内存限制: 254288KB 题目描述: 给定N个数组成的序列,其中每个元素都是0~9之间的个数。要求从这个序列中找出K个元素,组成一个K位数,并且这K个元素在原N个数中的相对顺序不变。为这个K位数最大是多少? 输入描述 第一行 输入为N和K(1 ≤ N ≤ 1e6,1 ≤ K ≤ N),用空格分隔,其中N为无序序列的长度,K为需要得到的有序数长度。 第二行 依次输入N个个位数,用空格分隔,表示这个序列 输出描述 能够得到的最大K位数的数值(前缀0不输出) 示例1 输入: 2 2 1 2 输出 12 示例2 输入: 8 4 4 6 2 5 4 1 9 8 输出 6598 示例3 输入: 6 2 0 0 0 0 0 0 输出 0 规则 请尽量在全场考试结束10分钟前调试程序,否则由于密集排队提交,可能查询不到编译结果,点击“调试”亦可保持代码 本编程题不可以使用本地编译器 解题思路: 1、将数组中索引为0 ~ n-k的数存入集合curList,如下图pre与i之间的数值(黄色区域)存入curList集合,并求出curList集合中的最大值6及索引。 参考代码: import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class TikTok_Test03 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[] arr = new int[n]; for (int i=0; i List list = new ArrayList(); List curList = new ArrayList(); int n = arr.length; int pre = -1; int max = 0; for (int i=0;i for (int j=pre+1;j public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); List list = new ArrayList(); for (int i=0; i double ans = 1.0; int rep = m-n; List temp = new ArrayList(); Collections.sort(list); temp.addAll(list); for (int i=0; i if (i!=n-1){ if (temp.get(i) break; } }else{ temp.set(i,1-(1-temp.get(i))*(1-list.get(i))); } rep--; } ans *= temp.get(i); } return ans; } } |
CopyRight 2018-2019 实验室设备网 版权所有 |