Проверка повторяющихся чисел в int [] Java - PullRequest
0 голосов
/ 05 июня 2011

Я хочу, чтобы можно было узнать, появляется ли какое-либо число в int [] 3 или более раз?Как я могу это сделать?

Было бы здорово иметь метод

boolean hasTriples(int[] numbers) {

//some code

}

Ответы [ 3 ]

7 голосов
/ 05 июня 2011

Создайте Map<Integer, Integer>, и пусть целое число n отображается на количество вхождений n .

Выполните цикл по массиву, чтобы заполнить карту, затем выполните цикл по ключам на карте, чтобы проверить, какие ключи соответствуют значению> = 3.

Вот код, с которого можно начать:

int[] arr = { 1, 3, 2, 3, 3, 4, 2, 2 };
Map<Integer, Integer> counts = new HashMap<Integer, Integer>();

// Count occurrencies
for (int i : arr) {
    if (!counts.containsKey(i))
        counts.put(i, 0);
    counts.put(i, 1 + counts.get(i));
}

// Print how many times each number occurs in arr.
for (int i : counts.keySet())
    System.out.printf("i: %d, count: %d%n", i, counts.get(i));
4 голосов
/ 05 июня 2011
   public boolean anyRepeatThreeTimes( int [] array ) {
      Map<Integer, Integer > map = new HashMap<Integer, Integer>();
      for ( int index = 0; index < array.length; index++ ) {
         Integer total = map.get(array[ index ]);
         int count;
         if ( total == null ) {
            count = 1;
         }
         else {
            count = total + 1;
            if ( count >= 3 ) {
               return true;
            }
         }
         map.put( array[ index ], count );
      }

      return false;
   }

Вот что происходит:

  1. Вы передаете массив целых чисел.
  2. Вы настраиваете карту значений массива для подсчета значения.
  3. Вы проходите массив.Для каждого целого числа в массиве:

    a.Вы получаете текущий счетчик для этого значения массива

    b.если значения не существует, начните со значения 1

    c.если значение существует на карте для данного значения, добавьте его к нему

    d.если значение, полученное из карты + 1, превышает ваш предел 3, то вы продемонстрировали, что в массиве есть значение, которое повторяется не менее трех раз.

  4. , если вы сделаетедо конца цикла, не возвращая true, затем вместо этого возвращайте false, поскольку никакое значение не повторяется 3 раза.

2 голосов
/ 05 июня 2011

Вот способ сделать это без использования каких-либо дополнительных классов, таких как класс Map.Это может быть медленнее, но, надеюсь, легче понять.

public boolean hasTriples(int[] list) {
    for (int i = 0; i < list.length; i++){
        int duplicates = 0;

        for (int j = i+1; j < list.length; j++){
            if (list[i] == list[j]) {
                duplicates++;
                if (duplicates >= 3) return true;
            }
        }
    }
    return false;
}

Вот что делает этот код.Внешний цикл for проходит по списку, чтобы убедиться, что каждое значение проверяется на наличие дубликатов.Внутренние циклы проходят через запоминающее устройство списка, чтобы проверить, сколько дублирующих значений существует.Если найдено три или более дубликатов, функция вернет true и не обработает остальную часть списка.Если внешний цикл for завершается без возврата метода true, возвращается false, поскольку не должно быть никаких трех дубликатов.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...