Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Найти одинаковые элементы в массиве и вывести их.


Автор: webcom 19.8.2014, 13:37
Буду благодарен за алгоритм решения данной задачи на Java.
Причём должен выводится в таком виде : совпадение n в позиции x.

Автор: korob2001 3.10.2014, 21:40
Можно попробовать так:
Код

public static void main(String[] args) {
        String[] elements = {"Вася", "Коля", "Ваня", "Коля",  "Коля",
                             "Вера", "Вася", "Вера", "Света", "Вера"};
    
        // Решение
        Map<String, List<Integer>> result = new HashMap<>();
        for (int i = 0; i < elements.length; i++) {
            if (!result.containsKey(elements[i]))
                result.put(elements[i], new ArrayList<>());
            result.get(elements[i]).add(i);
        }
        
        // Выводим результат на консоль
        for (Map.Entry<String, List<Integer>> entry : result.entrySet()) {
            System.out.print(entry.getKey() + " = { ");
            entry.getValue().stream().forEach((position) -> {
                System.out.print(position + " ");
            });
            System.out.println("}");
        }
    }

По коду, вопросов не должно возникнуть, но вкратце всё же опишу раздел "решение".
1. Создаём карту с ключём типа String, а значением типа List<Integer>.
2. В цикле проходим по всем элементам массива.
       На каждой итерации проверяем есть ли уже такой ключь, как наше текущее имя.
             Если нет, тогда добавляем его с пустым списком в качестве значения.
       Здесь мы уже точно знаем, что такой элемент есть, потому смело вытаскиваем по ключу список и добавляем в него текущую позицию.

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

Удачи

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)