(笔试记录)百度春招后端笔试

这篇博客详细记录了百度春季招聘后端笔试的三道题目:1) 给定数组和子序列数量k,如何划分使子序列平均数之和最小;2) 如何计算给定数组中排列的数量;3) 如何求JAVA代码中for循环的最大嵌套数。每道题目都提供了解题思路,并分享了测试用例的通过情况。
摘要由CSDN通过智能技术生成

第一题,挑选平均数最小的子序列

给一个长度n的数组,和一个数字k,要求将这个数组的元素逐一划分到k个子序列中,使得k个子序列的平均数之和最小。
比如数组[-1,3,4,-1], k = 2
如果划分成[-1,-1]和[3,4],平均数之和为-1 + 3.5 = 2.5
如果划分成[-1]和[-1,3,4],平均数之和为-1 + 3 = 2
输出最小的平均数之和

思路:将数组排序,取前k-1个元素当作k-1个子序列,剩下的元素当作第k个子序列,例如数组[-1,3,4,-1],k=2,排序后[-1,-1,3,4],划分为[-1],[-1,3,4]

第二题,求排列数

排列指一个长度k的数组中,数字1到k恰好各出现了一次
输入一个数组,求数组中有几个排列
例如[1,2,4,3],所有的排列为[1,2],[1,2,4,3]

思路:双层循环,分别以下标0,1,…作为开头,枚举所有的子数组,检测每一个子数组是不是排列。使用set检查排列,如果set.size() == max(子数组),那么这个子数组就是一个排列。如果set.contains(元素),那就没必要再向后延伸子数组了,直接用下一个下标作为开头继续搜索。

(过了百分之70用例,超时了,后来想了一想应该用dp做)

第三题,求for循环嵌套数

输入一段完整的且没有语法错误的JAVA代码࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值