1

まず、すでに重複した答えがたくさんあることは知っていますが、Googleで検索しても、欲しいものが見つかりません。これはインタビューで尋ねられた質問です。

だから、私の質問のために:私は次のint配列を持っています:

int[] array = {1, 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 6, 7, 7, 8, 8, 9, 9};

編集:配列がソートされていると想定できます。

重複することなく、個別の値のみを取得したいのですが、これは次のことを意味します。

array = {1, 2, 3, 4, 5, 6, 7, 8, 9, ......};

編集: 配列を縮小する必要はないと仮定しますが、ソートされた順序で値を返し、最後に残りの値を返します。

いくつかの指示があります:

  1. 他の配列や新しい配列は使用しないでください。つまり、結果を返すために同じ配列を使用してください。
  2. SetやArrayListなどのコレクションは使用しないでください。
  3. それをあなたができる最も有用なものにしてください。

Iv'eはSetでこれを実行しようとしましたが、今は別のものが必要です。また、重複する値を-1の値に置き換えようとしましたが、これは、正の値のみを使用していると想定している場合にのみ当てはまります。

同じ質問を見つけたら、教えてください。これを削除します。

ありがとう。

4

1 に答える 1

9

それらが整っていれば、それはそれほど難しいことではありません。

/**
 * removes duplicates in the provided sorted array
 * @return the number of different elements (they're at the beginning)
 */
public static int shrink(int[] array) {
    int w = 0;
    for (int i=0; i<array.length; i++) {
      if (i==0 || array[i]!=array[i-1]) {
          array[w++]=array[i];
      }
    }
    return w;
}

その後、最初のw要素だけが面白いです。

于 2012-09-21T12:38:16.903 に答える