Algorithm 从整数数组中删除重复整数-psuedo代码

Algorithm 从整数数组中删除重复整数-psuedo代码,algorithm,Algorithm,我需要一些帮助来纠正这个错误 问题 编写一个包含两个数组的函数-一个数组是源数组,另一个数组是索引数组,并从第二个数组中删除源数组索引中存在的所有元素 这就是我想到的 public static int[] DeleteArrayUsingIndices(int[] source, int[] indices) { for (int i = 0; i < indices.Length; i++) { if (indices[

我需要一些帮助来纠正这个错误

问题 编写一个包含两个数组的函数-一个数组是源数组,另一个数组是索引数组,并从第二个数组中删除源数组索引中存在的所有元素

这就是我想到的

 public static int[] DeleteArrayUsingIndices(int[] source, int[] indices)
    {
        for (int i = 0; i < indices.Length; i++)
        {
            if (indices[i] < source.Length)
            {
                source[indices[i]] = int.MinValue; // delete
            }                
        }

        return source;
    }
公共静态int[]deleteArrayusingIndexes(int[]源,int[]索引)
{
for(int i=0;i
我对这个解决方案不是很确定,因为这不会删除该值。谁能帮我解决这个问题。

试试这个

public static void main(String[] args) {
    Integer[] a = {1,2,3,4,5,6,7,8,9};
    Integer[] b = {2,3};
    System.out.println(Arrays.asList(deleteArrayUsingIndices(a, b)));
}
^用于测试

public static Integer[] deleteArrayUsingIndices(Integer[] source, Integer[] indices)
{
    ArrayList<Integer> sourceArr = new ArrayList<Integer>(Arrays.asList(source));
    ArrayList<Integer> toDelete = new ArrayList<Integer>();
    for (int i:indices)
    {
        try {
            toDelete.add(sourceArr.get(i));
        } catch (Exception e) {}              
    }

    sourceArr.removeAll(toDelete);

    return sourceArr.toArray(new Integer[sourceArr.size()]);
}
公共静态整数[]删除数组索引(整数[]源,整数[]索引)
{
ArrayList sourceArr=新的ArrayList(Arrays.asList(source));
ArrayList toDelete=新的ArrayList();
for(int i:索引)
{
试一试{
toDelete.add(sourceArr.get(i));
}捕获(例外e){}
}
sourceArr.removeAll(toDelete);
返回sourceArr.toArray(新整数[sourceArr.size()]);
}

您无法真正从数组中删除元素,因此您需要询问此措辞的含义。如果用异常元素(如代码中的
int.MinValue
)替换元素是可以接受的,那么您的解决方案就可以了

另一种解释可能是重新排列数组,使“未删除”索引以与原始索引相同的顺序位于数组的开头——在本例中,您希望返回数组的新“长度”(未“删除”的元素数)——这意味着“删除”操作会将尚未删除的元素数组压缩到数组的开头(将数组的内容从已删除索引的开头移到数组的结尾(或移到未删除元素的结尾)。必须注意不要两次“删除”同一元素

要实现后者,您必须跟踪哪个位置移动了多少个元素。或者,更新索引数组以减少大于当前位置的索引(以容纳现在压缩的数组)——在这种情况下,您可以从排序索引数组开始(可能同时删除重复项)只需记录到目前为止已经改变了多少位置