0

removeAll要素のすべての出現をリストから削除する操作を考えてみましょう。このメソッドは、削除された要素の数を返します。

public int removeAll(E element)

この操作を次の目的で実装します。 1. 配列ベースのソートされていないリスト

セットは使えません。

私が今始めたこと:

  public int removeAll(T element) {

int duplicatesRemoved = 0;

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

    }
  }

残りの作業を完了できません。何か助けてください。

4

5 に答える 5

0

これは宿題のようで、説明はありませんが、このパズル:

int lengthWithValues = array.length;
for (int i = 0; i < lengthWithValues; i++) {
    // Loop invariant: for all at < i array is sorted, unique and complete.
    int valueToBeChecked = array[i];
    for (int k = i + 1, int j = i + 1; k < lengthWithValues; j++) {
        if (array[j] == valueToBeChecked) {
            --lengthWithValues; // Remove duplicate
        } else {
            array[k] = array[j]; // Maintain differing from all at <= i.
            ++k;
        }
    }
}
duplicatesRemoved = array.length - lengthWithValues;
// array[0 .. length - duplicatesRemoved] is the unique array.
int[] uniqueArray = new int[lengthWithValues];
System.arrayCopy(array, 0, uniqueArray, 0, lengthWithValues);
于 2013-04-22T16:29:46.243 に答える
0

コンテンツを にダンプしてcollection of some sort since you're not allowed to use Setから、コレクションにあるものを引き出します。

配列 (プリミティブ配列ではなくクラス) は、contains メソッドをサポートしていますが、毎回新しいコレクションを反復処理することになり、非効率になります。

または、Array も使用できない場合は、プリミティブ配列で行うことができます。重複を探すために何度も繰り返します。

于 2013-04-22T16:20:55.620 に答える
0

重複する要素を のようなものに設定することをお勧めしますnull。すべての重複を削除したら、末尾の非 null 要素を中央の null 要素と交換して、配列を圧縮します。

または、空の配列を作成し、重複していない要素を新しい配列に移動します。

于 2013-04-22T16:22:11.377 に答える
0

1.

 /**
 * This method removes all duplicates from an array named "array"
 * using a temporary List. So it converts the array into 
 * something like a Java set
 * 
 * @return int number of duplicates removed
 */
public static int removeAll() {
    int duplicates = 0;
    List<Object> list = new ArrayList<>();
    for(int i=0;i<array.length;i++){
        Object element = array[i];
        if(list.contains(element)) {
            duplicates++;
        }
        else {
            list.add(element);
        }
    }
    array = list.toArray();
    return duplicates;
}

2.

/**
 * This method removes duplicates from an array named "array" using a
 * temporary List.
 * @param elementToBeRemoved
 * @return int number of duplicates removed
 */
public static int removeAll(Object elementToBeRemoved) {
    int duplicates = 0;
    List<Object> list = new ArrayList<>();
    for (int i = 0; i < array.length; i++) {
        Object element = array[i];
        if (list.contains(elementToBeRemoved)) {
            duplicates++;
        } else {
            list.add(element);
        }
    }
    array = list.toArray();
    return duplicates;
}
于 2013-04-22T16:53:58.270 に答える