4.12 百度笔试(QA测试工程师) 2h

30道选择题,每题2分,涉及概率论;python、java,c++的代码填写和模拟输出,计算机网络,机器学习和Linux的基础知识,还有设计模式和算法

编程题1 简单整数问题

n个数(n<=100000),设M为n个数中出现次数最多的数,如果有相同数量,取其中的最大值;N为n个数中出现次数最少的数,如果有相同数量,取其中的最小值。输出M-N

思路:100%

  1. 生成一个字典记录每个数字出现的次数
  2. 将这个字典按照值排序,如果相同,按照键的大小排序,一个从小到大排列,一个从大到小排列
  3. 取出两个排列的顶部,就分别是M和N,然后输出M-N即可

编程题2 切分绳子

n条长度不一定相等的绳子,1<=n<=100000,每条绳子的长度1<=l<=100000,并且只能切分一次,允许小数。输出最终的到最多根长度相同的绳子的数目是多少?

例子:

入:1 绳子数量

1 每根绳子长度

出:2 (0.5)

in:3

2 3 3

out:5 (1.5)

思路:64% 有点问题,有种情况没有考虑到,并且可能需要一些内置的函数,减少时间消耗,一直遍历可能超时

  1. 如同上题目,获取每个数字出现的次数,生成字典
  2. 选择出现次数最多,如果有多个,选择其中最小的那个,以它的一半作为标准长度,并将输出out=2x它原本出现的次数。
  3. 小于标准长度的绳子放弃,等于大于等于标准长度的out+=1;这里已经将符合步骤2中的长度的绳子排除在字典外了

如果说标准长度是stand,那么小于stand的绳子贡献是-1,等于stand的贡献是1,大于stand的贡献是0;如果小于stand的绳子太多,貌似就出问题,后来说是答案错误,不是超时,说明思路有问题,请大佬指正。

全部评论
剪绳子的题,直接选出现次数最多的那个,这个条件并不充分,有可能选了以后前面舍弃的太多,比如1 2 3 4 4 10 10 10,这个例子,选10是6,选4是7
1
送花
回复
分享
发布于 2022-04-12 22:10

相关推荐

1 1 评论
分享
牛客网
牛客企业服务