Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何在某些指定位置将数组的子集向左移动?_Algorithm - Fatal编程技术网

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个项目的数组),可能会更清楚您要做什么。