9.假设以两个元素依值递增有序排列的线性表A,B分别表示两个集合,先要求另辟空间构造一个线性表C,其元素为两集合的交集,且表C中的元素也依值递增有序排列。是对顺序表编写求C的算法。
时间: 2024-03-04 22:48:05 浏览: 199
可以使用双指针法来求解两个有序集合的交集。具体算法如下:
1. 定义三个指针,分别指向集合A、B和C的起始位置。
2. 从头开始遍历集合A和B,比较当前位置的元素大小。
3. 如果A和B的当前元素相等,则将该元素加入集合C中,同时将A、B、C的指针都向后移动一位。
4. 如果A的当前元素小于B的当前元素,则将A的指针向后移动一位,继续比较。
5. 如果B的当前元素小于A的当前元素,则将B的指针向后移动一位,继续比较。
6. 当A或B的指针到达末尾时,算法结束。
下面是具体的代码实现(假设A、B、C为顺序表):
```python
def intersection(A, B):
i, j = 0, 0
C = []
while i < len(A) and j < len(B):
if A[i] == B[j]:
C.append(A[i])
i += 1
j += 1
elif A[i] < B[j]:
i += 1
else:
j += 1
return C
```
时间复杂度为O(min(m, n)),其中m和n分别为集合A和B的大小。
阅读全文