首页 > 解决方案 > 基于索引从数组中一一删除元素的算法

问题描述

这是对嵌入式系统中问题的最纯粹情况的简化,具有我无法控制的任意限制

让有任何东西的数组,例如单词:

["apple", "pear", "banana", "orange"]

让有一个索引数组(从一个开始)来删除项目:

[1,3]

我们需要一个函数来返回从起始数组中删除这些索引的结果,在这个例子中,结果应该是:

["pear", "orange"]

因为它删除了索引13

但是,唯一可以接受的操作是通过索引从数组中删除一项并对其进行变异的函数,例如:

我们有原始数组["apple", "pear", "banana", "orange"]
我们要删除项目[1,3]
我们removeItem(1)
结果是["pear", "banana", "orange"]

我们要删除的下一个项目是原始数组索引3处的项目,但是,当前索引处的项目是,因此,删除项目的天真的方法不起作用,因为它会导致删除,最终结果:"banana"3"orange""orange"

["pear", "banana"]代替["pear", "orange"]

标签: arraysalgorithm

解决方案


如果索引已排序,那么您只需在每次删除元素时将索引减一:

for i = 1 .. len(indices)
    elements.removeItem(indices[i] - i + 1)

或者,向后删除项目。这可能也更有效,具体取决于删除过程的实施:

for i = len(indices) .. 1
    elements.removeItem(indices[i])

推荐阅读