如何删除数组元素

时间:2013-10-29 19:40:10

标签: java arrays loops

编写一个方法deleteElement,它将int []和int目标作为输入,并从数组中删除所有出现的目标。该方法应该返回newint [] 。要考虑的问题: 为什么我们必须返回一个数组而不能简单地改变输入参数数组?

public class warm5{
  public static void main(String[] args){
    int[] array1= {1,2,2,3,4,5,2};
    int target1 = 2;
    deleteElement(array1,target1);

    public static int[] deleteElement(int[] array, int target){
      for(int i = 0, i<array.length, i++){
        if(array1[i] == target){

        }
      }
    }
  }
}

这是我写的,我不知道如何继续删除数组中的2。 请帮忙!

3 个答案:

答案 0 :(得分:4)

无法删除数组中的元素,根据定义它们是固定大小的。您可以做的是创建一个新数组,复制旧数组中除了要删除的数组之外的所有元素并返回新数组。或者,使用ArrayList,其中包含允许删除元素的操作:

答案 1 :(得分:1)

首先,遍历你的数组,找出你的目标元素有多少。

一旦你知道,你知道新阵列的大小。正如奥斯卡提到的那样,你不能从数组中“删除”,你只需创建一个没有你不想要的元素的新数组。

int targetCount = 0;

for (int i = 0; i < array.length; i++) {
    if (array[i] == target) {
        targetCount++;
    }
}

现在您知道新阵列中有多少项:array.length-targetCount

int[] newArray = new int[array.length-targetCount];
int newArrayIdx = 0;
for (int i = 0; i < array.length; i++) {
    if (array[i] != target) {
        newArray[newArrayIdx] = target;
        newArrayIdx++;
    }
}

这里我们遍历旧数组并检查每个元素以查看它是否是我们的目标。如果不是,我们将其添加到新阵列。我们必须独立跟踪旧数组的索引和新数组的索引,否则我们可能会冒险尝试在数组边界之外分配索引。

答案 2 :(得分:0)

这是一个常见的面试问题。在奥斯卡提出的解决方案中,您不知道新阵列的大小。因此解决方案不起作用或内存效率低下。

Trick是遍历数组,当你遇到一个等于给定元素的元素时,你将该元素放在数组的末尾,并将它与最终位置处的元素交换。通过这样做,您将收集数组末尾的所有给定元素。

这是一个工作逻辑

deleteElement(int[] given, int elem) {

  int endIdx = array.length - 1;
  for(int idx = 0; idx <= endIdx; idx++) {
    if(given[idx] == elem) {
      //swap idx with endIdx
      int tmp = given[endIdx];
      given[endIdx] = given[idx];
      given[idx] = tmp;
      endIdx--;
    }
  }

  return Arrays.copyOfRange(given, 0, endIdx);

}