如何在整数数组中找到重复项并将其删除?

时间:2015-10-13 06:27:11

标签: java arrays integer duplicates

我不能使用除数组之外的任何东西(没有列表或其他任何东西)。

我有一个数组:[1,2,3,3,5,6,7,7,9,9]

我想进入:[1,2,3,5,6,7,9]

这是我到目前为止的代码,但它错了。我希望它显示上面的数组,但here是实际输出的屏幕截图。我哪里错了?

import java.util.*;

class arrayTest {

    public static void main(String[] args) {
        int[] array = new int[10];
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        array[3] = 3;
        array[4] = 5;
        array[5] = 6;
        array[6] = 7;
        array[7] = 7;
        array[8] = 9;
        array[9] = 9;

        Arrays.sort(array);
        int count = 0;
        for (int i = 0; i < array.length - 1; i++) {
            if (array[i] == array[i + 1]) {
                count++;
            }
        }

        int[] newArray = new int[array.length - count];
        for (int j = 1; j < newArray.length; j++) {
            if (array[j] == array[j - 1]) {
                newArray[j] = array[j];
            } else {
                newArray[j - 1] = array[j - 1];
            }
        }

        System.out.println(count);
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(newArray));
    }
}

7 个答案:

答案 0 :(得分:0)

试试这个:

public static int[] deleteDuplicates(int[] input){

    int j = 0;
    int i = 1;
    if(input.length < 2){
        return input;
    }
    while(i < input.length){
        if(input[i] == input[j]){
            i++;
        }else{
            input[++j] = input[i++];
        }   
    }
    int[] output = new int[j+1];
    for(int k=0; k<output.length; k++){
        output[k] = input[k];
    }

    return output;
}

<强> IDEONE DEMO

答案 1 :(得分:0)

步骤

1。)排序数组

2。)删除重复项并使用count变量放入tempArray内,这将在最后添加零。

3。)将此tempArray的内容从index 0 to count + 1复制到新数组中。

public static void main(String[] args) throws Exception {
        int[] array = new int[10];
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        array[3] = 3;
        array[4] = 5;
        array[5] = 6;
        array[6] = 7;
        array[7] = 7;
        array[8] = 9;
        array[9] = 9;

        Arrays.sort(array);

        int[] tempArray = new int[array.length];

        int prev = array[0];
        int count = 0;

         tempArray[count] = array[0];

        for (int i = 1; i < array.length; i++) {
             if (prev != array[i]) {
                 count++;
                 tempArray[count] = array[i];
                }
                prev = array[i];
        }

        int[] finalArray = Arrays.copyOf(tempArray, count+1);// copies content from tempArray (0 to count + 1) index
        System.out.println(finalArray);
    }

答案 2 :(得分:0)

你的第二个for循环应该是:

for (int i = 0, j = 0; i < array.length; i++)
    if (i == 0 || array[i] != array[i - 1])
        newArray[j++] = array[i];

答案 3 :(得分:0)

import java.util。*;

班级考试{

public static void main(String[] args) {
    Integer[] array = new Integer[10];
    StringBuffer stringBuffer = new StringBuffer();
    array[0] = 1;
    array[1] = 2;
    array[2] = 3;
    array[3] = 3;
    array[4] = 5;
    array[5] = 6;
    array[6] = 7;
    array[7] = 7;
    array[8] = 9;
    array[9] = 9;

   String arrayString =  Arrays.toString(array);
   for(int index =0 ; index <= arrayString.length(); index++){
      try{
          int number = Integer.parseInt(arrayString.charAt(index)+"");
          if(!stringBuffer.toString().contains(number+"")){
          if(stringBuffer.length()!=0)
              stringBuffer.append(",");
             stringBuffer.append(number);
          }

      }catch(Exception e){

      }
   }
   String[] stringArray = stringBuffer.toString().split(",");
   array = new Integer[stringArray.length];
   for(int index = 0 ; index < stringArray.length ; index++){
       array[index] = Integer.parseInt(stringArray[index]); 
   }
   System.out.println(Arrays.toString(array));
}

}

这对您有帮助,可以查看

答案 4 :(得分:0)

试试这个:

array = IntStream.of(array).distinct().toArray();

答案 5 :(得分:0)

你有几件不同的事情发生:

  

我哪里错了?

        if (array[j] == array[j - 1]) {
            newArray[j] = array[j];
        } else {
            newArray[j - 1] = array[j - 1];
        }

这意味着当jj-1相等时,您将j-1设置为某个内容,j本身保持不变(默认为0 INT)...

只需将newArray[j - 1] = array[j - 1];更改为newArray[j] = array[j - 1];

即可

答案 6 :(得分:-1)

在您的代码中,您将array中的值循环一个长度为newArray.length,然后array的最后一部分将丢失。

更改

for (int j = 1; j < newArray.length; j++) {
            if (array[j] == array[j - 1]) {
                newArray[j] = array[j];
            } else {
                newArray[j - 1] = array[j - 1];
            }
        }

        int index = 0;
        for(int j = 0; j< array.length - 1; j++){
                if(array[j] == array[j + 1]){
                    j++;
                }
                newArray[index++] = array[j];
        }