13

これをコーディングする際に問題があります:

removeDuplicates入力として整数の配列を受け取り、結果としてすべての重複が削除された新しい整数の配列を返すという名前の静的メソッドを作成します。たとえば、入力配列に要素 {4, 3, 3, 4, 5, 2, 4} がある場合、結果の配列は {4, 3, 5, 2} になります。

これが私がこれまでに行ったことです

public static int[] removeDuplicates(int []s){
    int [] k = new int[s.length];
    k[0]=s[0];
    int m =1;
    for(int i=1;i<s.length;++i){
        if(s[i]!=s[i-1]){
            k[m]=s[i];
            ++m;
        }//endIF
    }//endFori
    return k;
}//endMethod
4

24 に答える 24

8

順序を維持し、整数配列内の重複を削除するには、これを試すことができます。

public void removeDupInIntArray(int[] ints){
    Set<Integer> setString = new LinkedHashSet<Integer>();
    for(int i=0;i<ints.length;i++){
        setString.add(ints[i]);
    }
    System.out.println(setString);
}

お役に立てれば。

于 2013-07-28T07:38:04.237 に答える
6

これを試して -

public static int[] removeDuplicates(int []s){
    int result[] = new int[s.length], j=0;
    for (int i : s) {
        if(!isExists(result, i))
            result[j++] = i;
    }
    return result;
}

private static boolean isExists(int[] array, int value){
    for (int i : array) {
        if(i==value)
            return true;
    }
    return false;
}
于 2012-12-17T10:18:26.280 に答える
2

lambdaj (ダウンロードはこちらウェブサイト) を使用できるかもしれません。このライブラリは、コレクション (..list,arrays) を管理するのに非常に強力です。次のコードは非常にシンプルで、完全に機能します。

import static ch.lambdaj.Lambda.selectDistinct;
import java.util.Arrays;
import java.util.List;

public class DistinctList {
     public static void main(String[] args) {
         List<Integer> numbers =  Arrays.asList(1,3,4,2,1,5,6,8,8,3,4,5,13);
         System.out.println("List with duplicates: " + numbers);
         System.out.println("List without duplicates: " + selectDistinct(numbers));
     }
}

このコードは次を示します。

List with duplicates: [1, 3, 4, 2, 1, 5, 6, 8, 8, 3, 4, 5, 13]
List without duplicates: [1, 2, 3, 4, 5, 6, 8, 13]

1 行で個別のリストを取得できます。これは単純な例ですが、このライブラリを使用するとさらに解決できます。

selectDistinct(numbers)

プロジェクトに lambdaj-2.4.jar を追加する必要があります。これが役立つことを願っています。

注:これは、コードに代わるものがあると仮定するのに役立ちます。

于 2013-07-28T17:32:26.110 に答える
2
public int[] removeRepetativeInteger(int[] list){
        if(list.length == 0){
            return null;
        }
        if(list.length == 1){
            return list;
        }

    ArrayList<Integer> numbers = new ArrayList<>();
    for(int i = 0; i< list.length; i++){
        if (!numbers.contains(list[i])){
            numbers.add(list[i]);
        }
    }
    Iterator<Integer> valueIterator = numbers.iterator();
    int[] resultArray = new int[numbers.size()]; 
    int i = 0;
    while (valueIterator.hasNext()) {
        resultArray[i] = valueIterator.next();
        i++;
    }
    return resultArray;     

}
于 2013-11-19T07:00:27.593 に答える
1

Google の Guava ライブラリを使用してImmutableSet doを使用することもできます

ImmutableSet.copyOf(myArray).asList();
于 2012-12-17T10:47:42.667 に答える
1

Setまた、セマンティクスが正確に重複要素を含まない に配列要素を配置することもできます。

于 2012-12-17T10:11:03.990 に答える
1

セットには重複を含めることができないため、配列を反復処理してセットに入力します。次に、要素をセットから新しい配列にコピーして返します。これを以下に示します。

public static int[] removeDuplicates(int[] array) {
    // add the ints into a set
    Set<Integer> set = new HashSet<Integer>();
    for (int i = 0; i < array.length; i++) {
        set.add(array[i]);
    }

    // copy the elements from the set into an array
    int[] result = new int[set.size()];
    int i = 0;
    for (Integer u : set) {
        result[i++] = u;
    }
    return result;
}
于 2012-12-17T10:31:44.153 に答える
1

重複要素を許可しない HashSet を使用できます

public static void deleteDups(int a []) {

    HashSet<Integer> numbers = new HashSet<Integer>();

        for(int n : a)
        {
            numbers.add(n);
        }

        for(int k : numbers)
        {
            System.out.println(k);
        }
        System.out.println(numbers);
    }       

public static void main(String[] args) {
    int a[]={2,3,3,4,4,5,6};
            RemoveDuplicate.deleteDups(a);

}

}
o/p is 2
3
4
5
6

[2、3、4、5、6]

于 2013-07-28T09:07:09.263 に答える
1

これは私のために働いた:

import java.util.Arrays;
import java.util.HashSet;

public class Util {

    public static int[] removeDups(final int[] intArrayWithDups) {
        final int[] intArrayDupsRemoved = new int[intArrayWithDups.length];

        final HashSet<Integer> alreadyAdded = new HashSet<>();
        int innerCounter = 0;
        for (int integer : intArrayWithDups) {
            if (!alreadyAdded.contains(integer)) {
                intArrayDupsRemoved[innerCounter] = integer;
                alreadyAdded.add(intArrayDupsRemoved[innerCounter]);
                innerCounter++;
            }
        }

        return Arrays.copyOf(intArrayDupsRemoved, innerCounter);
    }
}
于 2017-04-17T18:44:20.357 に答える
0

あなたがしなければならないことは、2番目の配列の各要素について、前の要素がすでに存在するかどうかを確認する必要があることです。

より良いアプローチを使用できます HashSet を使用してセットを返します。

public static Set removeDuplicates(int []s){
  Set<Integer> set = new HashSet<Integer>();       
   for(int i=0;i<s.length;++i){
          set.add(s[i]);
        }//endFori
  return set;
}//endMethod

int 配列が必要な場合は、この java-hashsetinteger-to-int-arrayリンクを参照してください。

于 2012-12-17T10:11:00.003 に答える
0

これを試して

public static int[] removeDuplicates(int[] s) {     
    Integer[] array = new HashSet<Integer>(Arrays.asList(ArrayUtils.toObject(s))).toArray(new Integer[0]);      
    return ArrayUtils.toPrimitive(array);
}

編集:プリミティブに変換するためにApache Langで更新されました。

于 2012-12-17T10:14:18.193 に答える
0

私が作成したこのコードを使用してください!!!

import java.util.*;

public class DistinctNumber {
    public static void main(String[] args) {

        int[] nums=  {1,3,2,3,4,3,2,5,4,6}; 
        int [] T2 = duplicate(nums);
        for (int i = 0; i < T2.length; i++) {
            System.out.println(T2[i]);

        } 
    }
    public static boolean exist(int x,int []A){
        for (int i = 0; i < A.length; i++) {
            if(x==A[i]){
                return true;
            }
        }
        return false;
    }
    public static int [] EliminateDuplicate(int [] numbers){
       int [] B = new int[numbers.length];
       int i=0,j=0;
       for(i=0;i<numbers.length;i++){
           if(!exist(numbers[i], B)){
               B[j] = numbers[i];
               j++;
           }

       }
       int[] C = new int[j];
        for (int k = 0; k < C.length; k++) {
            C[k] = B[k];

        }
       return C;
    }


}
于 2016-10-11T02:22:29.133 に答える
0
public class Test 
static int[] array = {4, 3, 3, 4, 5, 2, 4};
static HashSet list = new HashSet();
public static void main(String ar[])
{       
    for(int i=0;i<array.length;i++)
    {         
      list.add(array[i]);

    }
    System.out.println(list);
}}

出力は次のとおりです。[2, 3, 4, 5]

于 2012-12-17T11:12:34.093 に答える
0

このようなことができます

  public class MyClass {

    public static void main(String args[]) {

        int[] man = {4,56,98,89,78,45,78, 79, 56};

        for (int i = 0; i < man.length; i++)
        {
            for (int j = i+1; j < man.length; j++)
            {
                //check if it is equal
               if (man[i] == man[j])
                {

                     man[j] = man[j] -1;

               //Decrementing size

                   j--;
                }
            }
        }

         //Array without duplicates

        for(int k=0; k<man.length; k++)
        {

            System.out.print(" " + man[k]);
        } 
    }
}
于 2017-12-14T13:32:55.173 に答える
0

ただし、素朴に行うことができます。まず、配列をソートする必要があります。任意のソートアルゴリズムを使用して実行できます。クイックソートを使用しました。そして、次の位置で位置を確認します。同じでない場合は、新しい配列に値を追加します。そうでない場合は、この反復をスキップします。

サンプル コード (クイック ソート):

 public static void quickSort(int[] array, int low, int high) {
    int i = low;
    int j = high;

    int pivot = array[low + (high - low) / 2];

    while (i <= j) {
        while (array[i] < pivot) i++;
        while (array[j] > pivot) j--;
        if (i <= j) {
            exchange(array, i, j);
            i++;
            j--;
        }
    }
    if (0 < j) quickSort(array, 0, j);
    if (i < high) quickSort(array, i, high);
}

public static void exchange(int[] array, int i, int j) {
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

重複を削除します。

 public static int[] removeDuplicate(int[] arrays) {
    quickSort(arrays, 0, arrays.length - 1);

    int[] newArrays = new int[arrays.length];
    int count = 0;
    for (int i = 0; i < arrays.length - 1; i++) {
        if (arrays[i] != arrays[i + 1]) {
            newArrays[count] = arrays[i];
            count++;
        }
    }
    return newArrays;
}
于 2013-07-28T08:45:51.340 に答える
-2

公開クラス Foo {

public static void main(String[] args) {
    //example input
    int input[] = new int[]{1, 6 , 5896, 5896, 9, 100,7, 1000, 8, 9, 0, 10, 90, 4};
    //use list because the size is dynamical can change
    List<Integer> result = new ArrayList<Integer>();

    for(int i=0; i<input.length; i++)
    {
        boolean match = false;
        for(int j=0; j<result.size(); j++)
        {
            //if the list contains any input element make match true
            if(result.get(j) == input[i])
                match = true;
        }
        //if there is no matching we can add the element to the result list
        if(!match)
            result.add(input[i]);
    }
    // Print the result
    for(int i=0; i<result.size(); i++)
        System.out.print(result.get(i) + ", ");

}

出力: 1, 6, 5896, 9, 100, 7, 1000, 8, 0, 10, 90, 4,

于 2015-05-28T03:56:42.070 に答える