我有以下算法问题。
输入:数组 A[1...n],整数 m
我想提取长度在 [2...m] 范围内的所有可能子数组,以便使用这些子数组我可以重新创建原始数组 A。子数组有以下限制:
- 子数组长度之和应等于原始长度(即n)
- 两个或多个子数组中不应有相同的元素(这基本上是复述 1)
输出:形成原始数组 A 的子数组集合
例如,我们有 A[1...4], m = 2 我们有以下子数组,其索引为数组 A: (1,2) (2,3) (3,4) (1,3) (1, 4) (2,4)
可以通过组合 (1,2) (3,4) 构建数组;(2,3) (1,4); (2,4) (1,3) 等
问题是如何有效地实现算法(如果有任何用处,特别是使用 Java)?