我有一个数组:
A = [0,2,5,6]
B = [5,6,8,9]
C = [6,7,8,9]
我想写两个函数,具体如下:
问题1 当我传入上面定义的任何一个数组时,我以顺序的方式(按顺序意义,n+1)得到数字的组合。因此,期望的输出是:
ResultA = [[0],[2],[5],[6],[5,6]]
ResultB = [[5],[6],[8],[9],[5,6],[8,9]]
ResultC = [[6],[7],[8],[9],[6,7],[7,8],[8,9],[6,7,8],[7,8,9],[6,7,8,9]]
下面是我尝试过的:
sorted_ids = sorted(number_collection)
combinations = [sorted_ids[j: j + i] for i in range(1, len(sorted_ids)) for j in range(len(sorted_ids) - i + 1)]
问题是它对数组C
有效,但对其他数组没有那么好的效果。你知道吗
问题2problem 1
的结果是这个问题的输入。问题是我想要的组合,存在于数字的唯一元素上。(我不确定我是否能用语言恰当地解释),下面是期望的输出:
FinalResultA = [[0],[2],[5,6]]
FinalResultB = [[5,6],[8,9]]
FinalResultC = [[6,7,8,9]]
有什么方法(以性能为导向)对我有用吗?你知道吗
这是一个相当有效的方法,虽然它需要O(N)辅助空间,但如果运行次数很小,则不应该很重要:
注意,这使用this classic approach对连续整数进行分组。它在连续整数组上迭代,“runs”,并生成作为单个元素列表的任何单个整数。如果运行长度超过1,我会将其添加到运行列表中。最后,以相反的方式迭代运行列表,得到“n-grams”,从order2到orderlen(run)。你知道吗
行动中:
注意
get_combos
假设输入是排序的。编辑
但是,对于:这将产生:
也就是说,3序列在产生后续运行的2序列之前开始。如果要在n+1 len序列之前生成所有n-len序列,请使用以下方法:
结果如下:
以下是一个函数中的两种解决方案,无需任何外部库:
测试用例:
输出:
第二
输出:
附言:一个要求是:如果我的答案对你有帮助,不要接受,就用它吧。你知道吗
相关问题 更多 >
编程相关推荐