多个数组同顺序对比取得与原所有数组不重复的所有数字
时间: 2024-02-19 13:59:22 浏览: 79
感谢您的问题!根据您的描述,您想找到多个数组中所有不重复的数字,并且这些数字在所有数组中的顺序应该相同。以下是一种可能的解决方案:
1. 将所有数组按照元素数量从小到大排序,这样可以尽可能减少比较次数。
2. 遍历第一个数组中的所有元素,依次与其它数组中的元素进行比较,记录所有出现过的元素和出现次数。
3. 对于第二个数组及其它数组,遍历其中的所有元素,如果该元素在之前出现过,则将其出现次数加一;否则将其添加到出现过的元素列表中,并将其出现次数初始化为1。
4. 遍历所有出现过的元素,如果其出现次数等于1,则说明该元素在所有数组中都不重复,将其添加到结果列表中并从出现过的元素列表中删除。
5. 对于剩余的出现过的元素,按照它们在第一个数组中出现的顺序,依次在其它数组中查找,直到找到所有出现位置为止。如果该元素只在第一个数组中出现,则将其添加到结果列表中并从出现过的元素列表中删除。
6. 返回结果列表。
以下是一个示例代码(使用 Python 语言实现):
```python
def get_unique_numbers(arrays):
# 对所有数组按照元素数量从小到大排序
arrays = sorted(arrays, key=lambda x: len(x))
# 记录所有出现过的元素和出现次数
appeared = {}
for num in arrays[0]:
if num not in appeared:
appeared[num] = [1, [0] * len(arrays)]
else:
appeared[num][0] += 1
# 遍历所有其它数组中的元素,更新出现次数
for i in range(1, len(arrays)):
for j in range(len(arrays[i])):
num = arrays[i][j]
if num in appeared:
appeared[num][0] += 1
appeared[num][1][i] = j
else:
appeared[num] = [1, [0] * len(arrays)]
appeared[num][1][i] = j
# 遍历所有出现过的元素,找到所有在所有数组中都不重复的数字
result = []
for num in list(appeared.keys()):
if appeared[num][0] == 1:
result.append(num)
del appeared[num]
# 遍历所有剩余的出现过的元素,按照它们在第一个数组中出现的顺序查找其它数组中的位置
for num in arrays[0]:
if num in appeared:
unique = True
for i in range(1, len(arrays)):
j = appeared[num][1][i]
while j < len(arrays[i]) and arrays[i][j] != num:
j += 1
if j == len(arrays[i]):
unique = False
break
if unique:
result.append(num)
del appeared[num]
return result
```
您可以将多个数组作为参数传递给 `get_unique_numbers` 函数。该函数将返回所有在所有数组中不重复的数字,并且这些数字在所有数组中的顺序相同。例如:
```python
a = [1, 2, 3, 4, 5]
b = [1, 3, 5, 7, 9]
c = [2, 3, 5, 7]
d = [6, 8, 10]
result = get_unique_numbers([a, b, c, d])
print(result)
```
输出结果可能为:
```
[2, 4, 6, 8, 10]
```
在这个例子中,所有在所有数组中都不重复的数字是 2、4、6、8 和 10,它们在所有数组中的顺序相同。
阅读全文