2016-11-29 4 views
-2

Существует массив, состоящий из нескольких чисел. Среди них обнаружено число пар (состоящее 2 раза в этом массиве) в java. предположим, что {2,5,7,8,2,3,5,6,5} в этом массиве 2 состоят 2 раза, так что это число пар.Найти парное число в массиве

я попробовал этот путь:

HashMap<Integer, Integer> hmap = new HashMap<>(); 
    for (int i = 0; i < arr.length; i++) 
    { 
     Integer c = hmap.get(arr[i]); 
     if (hmap.get(arr[i]) == null) 
       hmap.put(arr[i], 1); 
     else 
      hmap.put(arr[i], ++c); 
    } 
+0

сортировать массив, и для каждого элемента проверки, если следующий элемент такой же –

+0

положить на карте, держать нарушение на основе ключа, печать всех со счетчиком = 2 –

+0

также вы можете использовать Подход к карте –

ответ

1

вы можете использовать потоки

List<Integer> collect = Stream.of(2, 5, 7, 8, 2, 3, 5, 6, 5) 
      .collect(Collectors.groupingBy(e -> e)).entrySet().stream() 
      .filter(e -> e.getValue().size() == 2).map(Map.Entry::getKey) 
0

я могу думать о 2-мя способами. Сначала вы можете использовать карту, в этом методе вы должны взять каждый элемент в массиве и поместить его внутри карты, чтобы каждый раз, когда вы повторяете, вы можете проверить, уже ли вы вставляете это значение в карту.

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

+0

Также предполагается, что есть только 1 пара, так как вы сказали «узнать пару» –

+0

'проверять каждый элемент в массиве со всеми следующими элементами, и как только вы найдете совпадение, вы вернетесь и выйдете' Как бы вы знаете, что значение в позиции 2 не эквивалентно значению в позиции 0, уже проверено? EDIT: Да, ваш комментарий ответьте на мой вопрос ^^ – AxelH

0

Не размещайте действительный код, поместите его на карту и найдите счет. Но вам нужно быть осторожным, чтобы проверить счет на 2 секунды. Его не только 2, все счеты с 4,6,8 и т. Д. Также приведут к парам (я думаю, что этот момент отсутствует во всех ответах и ​​комментариях до сих пор для этого вопроса).

0

От того, что вы опубликовали, ваш код хорош. У вас есть карта, содержащая счетчик для каждого найденного значения.

Теперь вам просто нужно напечатать то, что вы хотите,

for(Integer i : hmap.keySet()){ 
    Integer cnt = hmap.get(i); 
    if(cnt > 1)} //or == 2 
     System.out.println(i + " -> " + cnt); 
    } 
} 

И у вас есть хороший маленький вход для каждой пары (с графом, если есть больше), просто обновить свой выход.

+0

Да, теперь у меня есть логика и ее работа для меня. Большое спасибо :) – Kaustav

+0

@Kaustav Добро пожаловать, в футуре, подумайте о предоставлении каждой информации с самого начала;);) Если вы нашли ответ, который вам подходит, не стесняйтесь его принимать (просто отмените голосование система ответа), чтобы закрыть вопрос. И увеличьте все ответы, которые вы нашли полезными. – AxelH

+0

Я буду. Спасибо :) – Kaustav

0

Программа, использующая примитивный тип

num [j] = '0'; // это просто заполнитель

int []num = {2,5,7,8,2,3,5,6}; 
     int counter = 0; 
     for(int i=0;i<num.length-1;i++){ 
      for(int j=i+1;j<num.length && num[i]!=0;j++){ 
       if(num[i] == num[j]){ 
        counter++; 
        num[j]= 0; 
       } 
      } 
      if(counter==1) 
       System.out.println("pair found for: "+num[i]); 
      counter = 0; 
     } 
+0

У него уже есть решение найти пары. И вы должны разбить цикл в некотором случае (если num [i] = 0, то это проверенное значение, пропустите его) – AxelH

+0

o/p: пара найдена для: 2 найденная пара: 5 // 5 встречается 3 раз в массиве, то как это может быть пара? – Kaustav

+0

@AxelH Я открыл вопрос в начале, и я не нашел код hashmap в то время. я забыл обновить браузер. Прости. и я исправил ответ – divine

Смежные вопросы