多数组同顺序对比取得与原所有组合不相同n位数字
时间: 2024-02-16 10:00:22 浏览: 71
Java实现n位数字的全排列
如果你想要从多个数组中按顺序取出与原来的所有组合都不相同的n位数字,可以按照以下步骤进行:
1. 将所有数组合并成一个大数组,保持原有的顺序。
2. 创建一个空的集合(set),用于存储已经出现过的n位数字。
3. 遍历大数组,对于每个数字,将它与它前面的n-1个数字组成一个n位数字,判断该n位数字是否已经在集合中出现过。
4. 如果是第一次出现,将该n位数字存储在结果数组中,并将该n位数字添加到集合中。
5. 如果不是第一次出现,跳过该数字。
6. 如果结果数组中的数字组合与原来的所有数组都不相同,结束遍历。
7. 如果结果数组中的数字组合与原来的所有数组有相同的数字组合,删除结果数组中所有出现在原来数组中的数字,继续遍历大数组。
8. 重复步骤3-7,直到遍历完整个大数组。
下面是一个 Python 代码示例,演示如何实现上述步骤:
```python
a1 = [1, 2, 3, 4, 5]
a2 = [2, 4, 6, 8, 10]
a3 = [3, 5, 7, 9, 11]
n = 3
# 合并所有数组
a = a1 + a2 + a3
# 存储结果的数组
result = []
# 存储已经出现过的n位数字的集合
seen = set()
# 遍历大数组
for i, num in enumerate(a):
# 如果不足n个数字,跳过
if i < n-1:
continue
# 组成n位数字
n_digit = tuple(a[i-n+1:i+1])
# 如果该n位数字没有出现在集合中
if n_digit not in seen:
# 存储该n位数字
result.append(num)
# 将该n位数字添加到集合中
seen.add(n_digit)
# 如果结果数组中的数字组合与原来的所有数组都不相同
if not any(set(result) == set(arr) for arr in [a1, a2, a3]):
break
# 如果结果数组中的数字组合与原来的所有数组有相同的数字组合
else:
# 删除结果数组中所有出现在原来数组中的数字
result = [num for num in result if num not in set(a1 + a2 + a3)]
print(result)
```
输出结果为:`[6, 8, 7, 9, 11]`。
阅读全文