Как работает функция поиска блокнота ++?

1

Для данной большой строки, содержащей случайные числа и для этих отдельных чисел, как я могу найти количество каждого числа?

Мой подход:

  1. Начиная с первого числа, рассчитывающего количество этого числа и сохраняя это число параллельно в другой массив/строку.
  2. Для второго номера сначала найдите в параллельном массиве, присутствует ли это, если нет, чем найти счет в основной строке.
  3. Продолжать.

Есть ли другой более быстрый и эффективный способ сделать это, потому что я использую функцию notepad/notepad++ find, которая работает довольно быстро по сравнению с моим методом.

Код:

List<Integer> list=new ArrayList<Integer>();
List<Integer> subList=new ArrayList<Integer>();

for(int i=0;i<list.size();i++){
    int count=1;
    int number=list.get(i);

    if(!subList.contains(number)){
        for(int j=i+1;j<list.size();j++){               
            if(list.get(j)==number){
                count++;
            }
        }
        System.out.println(number+" "+count);
        subList.add(number);
    }
}
  • 0
    Не пишите свое приложение на Java, обычно это довольно надежный способ получить его очень быстро. Это и использовать умный способ хранения данных.
  • 0
    Вы можете уточнить свой вопрос? Это довольно сложно понять. Пример был бы хорош.
Показать ещё 3 комментария
Теги:

1 ответ

0

Теперь, когда у нас есть демонстрация того, что у вас есть, мы можем лучше проанализировать ситуацию.

Похоже, вы не знаете, как связать счет с каждым отдельным элементом. Вы увеличиваете счет, но не связаны ни с одним из элементов, и, вероятно, самым большим фактором путаницы.

Здесь хорошо работает HashMap.

В этом случае вы хотите связать номер, который вы нашли, i, со своим собственным счетом, c. Счет начнется с 1, для первого, который мы нашли, и затем увеличиваем, как мы находим больше. С идеей HashMap мы можем взять любое целое число, о котором вы можете думать, и использовать его как ключ, а затем сопоставить его счет c как значение, которое вы извлекаете из ключа.

    HashMap<Integer, Integer> findMap = new HashMap<Integer, Integer>();

    for (int i = 0; i < list.size(); i++) {
        int number = list.get(i);

        if (findMap.get(number) == null) {
            // we didn't find it in the map, so we put it in with a counter of 1
            findMap.put(number, 1);
        }
        else {
            // we already have inserted it, we should add 1 to counter
            findMap.put(number, findMap.get(number) + 1);
        }
    }

    //to get everything out of the HashMap
    for (Integer i : findMap.keySet()) {
        System.out.println(i + ": " + findMap.get(i));
    }

В качестве задачи для ОП, если у вас достаточно опыта, определите Big O части вставки кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню