📜  亚马逊面试经历

📅  最后修改于: 2022-05-13 01:58:12.151000             🧑  作者: Mango

亚马逊面试经历

第一轮:在线测试
你有 M 条相同的绳索和 N 条相同的重量。你想做一个实验来确定相同绳子的强度 S,通过测试一根绳子可以承载多少重量。绳索的强度 S 定义为:
1) 如果一根绳子在第一个重量下断裂,S=0;
2)如果一根绳子可以承载n个重量并且在n+1个重量处断裂,S=n;
3) 如果一根绳子可以承载所有 N 个重量,则 S=N。
在一个测试中(“测试”是指检查一根绳子是否能承受一定的重量),如果绳子断裂,你必须拿另一根绳子继续实验;如果绳子没有断裂,则可以毫无问题地用于下一次测试。如果你用完了所有的绳子,但仍然不能确定绳子的强度 S,则实验失败。
请编写一个 C/C++ 程序,给定 M 和 N(M 和 N 都是整数,M>=1,N>=1),计算保证可以确定 S 所需的最小测试次数 T。尝试优化程序的时间复杂度,并解释:
1)你使用了什么样的“技巧”来优化时间复杂度?
2)没有这些“技巧”的时间复杂度是多少,有这些“技巧”的时间复杂度是多少?
提示1:如果你的绳子数量有限,你不敢冒险。例如,如果 M=1,您唯一的选择是从 1 到 N 一个一个地增加权重,以确保您可以在最坏的情况下确定 S。在这种情况下,T=N。
提示 2:如果你有很多绳索,二分搜索显然有助于有效地计算最小 T。
示例 1:M=1,N=20
命令:calc_n_tests 1 20
输出:20
示例 2:M=2,N=5
命令:calc_n_tests 2 5
输出:3