Разреженный массив с использованием HashMap - PullRequest
0 голосов
/ 19 апреля 2020

Разреженный массив

Существует набор входных строк и набор строк запросов. Для каждой строки запроса определите, сколько раз она встречается в списке входных строк. Например, при заданных входных строках = ['ab', 'ab', 'ab c'] и запросах = ['ab', 'ab c', 'b c'] мы находим 2 экземпляра «ab», 1 из «ab» и 0 из «b c». Для каждого запроса мы добавляем элемент в наш возвращаемый массив, результат = [2,1,0].

https://www.hackerrank.com/challenges/sparse-arrays/problem?isFullScreen=true

Я пробовал это решение, но оно проходит только 3 теста.

static int[] matchingStrings(String[] strings, String[] queries) {
        int[] result_arr=new int[queries.length];
        HashMap<String,Integer> map=new HashMap<>();
        for(int i=0;i<queries.length;i++)
        {
            map.put(queries[i],i);
        }
        for(int i=0;i<strings.length;i++)
        {
            if(map.containsKey(strings[i]))
            {
                int index=map.get(strings[i]);
                System.out.println(index);
                result_arr[index]+=1;
            }
        }
        return result_arr;
    }

1 Ответ

1 голос
/ 19 апреля 2020

Это сломается в случае, если ваш массив queries будет иметь повторяющиеся значения.

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

Вот обновленный код:

static int[] matchingStrings(String[] strings, String[] queries) {
        int[] result_arr=new int[queries.length];
        HashMap<String,Integer> map=new HashMap<>();
        for(int i=0;i<strings.length;i++)
        {
            if(map.containsKey(strings[i])) {
                map.put(strings[i], map.get(strings[i])+1);
            } else {
                map.put(strings[i],1);
            }
        } 
        for(int i=0;i<queries.length;i++)
        {
            if(map.containsKey(queries[i]))
            {
                result_arr[i]+=map.get(queries[i]);
            }
        }
        return result_arr;

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