Algorithm 如何在某些指定位置将数组的子集向左移动?
我有一个这样的数组:Algorithm 如何在某些指定位置将数组的子集向左移动?,algorithm,Algorithm,我有一个这样的数组:A=[X,0,X,Y,Y,0,0,0,Z,0,T,0,T,0]。我想写一个算法,从数组A中删除Y,并通过移动Z和T(将Z和T的位置替换为0)。所以,我会 原始数组是A=[X,0,X,Y,Y,0,0,Y,Z,0,0,0,Z,0,T,0,T,0,T,0] 结果是A=[X,0,X,Z,0,0,T,T,0,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
A=[X,0,X,Y,Y,0,0,0,Z,0,T,0,T,0]
。我想写一个算法,从数组A
中删除Y
,并通过移动Z
和T
(将Z
和T
的位置替换为0
)。所以,我会
- 原始数组是
李>A=[X,0,X,Y,Y,0,0,Y,Z,0,0,0,Z,0,T,0,T,0,T,0]
- 结果是
A=[X,0,X,Z,0,0,T,T,0,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
我的问题是case
size(I)您应该能够在数组的一次向前传递中实现这一点
这个想法是从数组的开头开始,寻找第一个Y。从那里开始,寻找第一个Z。然后从那里寻找第一个T
现在有了Y索引、Z索引和T索引。进行移位,将Z移动到Y位置,将T移动到Z位置,并将0置于旧的T位置
然后开始将Y索引从其当前位置移动,以查找下一个Y。找到后,将Z索引移动到下一个Z,将T索引移动到下一个T。使用泡沫,冲洗,重复
如上一个示例所示,如果没有更多的Z,则使用T索引查找下一个T,并用它替换Y
当你用完Y的时候,你就完了。所以,如果你有7个Y,只有3个Z和t,这并不重要。当你不能做更多的替换时,你就停下来
实现有点复杂,但上面显示的总体思路非常简单。因为我将Z
都向左移动。StackOverflow希望您这样做,我们也一样。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并记下:)我写了我尝试过的内容,这不是家庭作业问题。也许,python部分就是您所看到的。然后我将从问题中删除Python。我没有说这是一个家庭作业问题,只是说如果是,我们不会回答它。“将Y从数组a中删除,并通过移动Z和t来替换它们的位置”-这不清楚,你知道在CS中移动意味着什么吗?听起来你好像在重载这个术语,并应用了不同的含义。如果您给出3,4个较小的示例(3-4个项目的数组),可能会更清楚您要做什么。