我有一个这样的数组:A = [X, 0, X, Y, Y, 0, 0, Y, Z, 0, 0, 0, Z, 0, T, 0, T, 0]
。我想编写一个算法,从数组Y
中删除A
并通过移动Z
和T
来替换它们的位置(替换Z
的位置}和T
0
)。所以,我会得到
A = [X, 0, X, Y, Y, 0, 0, Y, Z, 0, 0, 0, Z, 0, T, 0, T, 0]
。 A = [X, 0, X, Z, Z, 0, 0, T, T, 0, 0, 0, 0, 0, 0, 0, 0, 0]
。我尝试了以下内容:
I={i: A[i] = Y}
。 J={j: A[j] != 0 & j > max(I)}
。size(I)>=size(J)
然后让i
循环遍历I
,j
循环遍历J
。A[i]=A[j]
并增加i
和j
。我的问题是案例size(I)<size(J)
?
这是另一个例子:
A = [X, Y, Y, Y, Z, 0, T]
。 A = [X, Z, T, 0, 0, 0, 0]
。另一个例子:
A = [X, Y, 0, Y, Z, T]
。 A = [X, Z, 0, T, 0, 0]
。答案 0 :(得分:1)
您应该能够在数组的单个正向传递中执行此操作。
想法是从数组的开头开始并寻找第一个Y.从那里,去寻找第一个Z.然后从那里寻找第一个T.
现在你有一个Y索引,Z索引和T索引。进行移位,将Z移动到Y位置,将T移动到Z位置,并将0置于旧T位置。
然后开始从当前位置移动Y索引以找到下一个Y.当您找到它时,将Z索引移动到下一个Z,并将T索引移动到下一个T. Lather,冲洗,重复。
如果你在上一个例子中没有更多的Z,那么你使用T索引来找到下一个T并用它替换Y.
当你用完Y时,你就完成了。因此,如果你有7个Y,只有3个Z和T,这并不重要。当你不能再做任何替换时,你就会停止。
实现有点繁琐,但上面显示的一般想法非常简单。