第一题,挑选平均数最小的子序列
给一个长度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代码