有一个整数顺序表L,设计一个尽可能高效的算法删除其中所有值为负整数的元素(假设L中值为负整数的元素可能有多个), * 删除后元素的相对次序不改变,并给出算法的时间和空间复杂度
时间: 2024-06-12 08:10:14 浏览: 125
已知线性表按顺序存于内存,每个元素都是整数,试设计把所有值为负数的元素移到全部正数值元素前边的算法 .cpp
可以使用双指针法,一个指针指向当前需要删除的位置,另一个指针向后扫描,遇到正整数就将其赋值给第一个指针所指向的位置,同时第一个指针向后移动一位。最后将第一个指针所指向的位置及其后面的元素全部删除即可。
时间复杂度为O(n),空间复杂度为O(1)。
代码示例(Python):
```
def remove_negative(L):
i = 0
for j in range(len(L)):
if L[j] >= 0:
L[i] = L[j]
i += 1
del L[i:]
L = [1, -2, 3, -4, 5, -6]
remove_negative(L)
print(L) # [1, 3, 5]
```
阅读全文