hashMap возвращает нулевое значение для существующих ключей? - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь закодировать простую задачу с двумя суммами (учитывая массив уникальных чисел, найдите два, которые равны требуемой сумме).

Я использую хэш-карту для получения необходимой суммы (сумма-текущая сумма, и, если вы можете найти ее на карте, это ваши индексы) с настройкой хеш-карты как <ключ = целое число в массиве, значение = индекс этого целого числа>. Однако, когда я пытаюсь запустить это, мне это не удается. Я заканчиваю тем, что возвращаю ноль и ноль для моего теста. Я не могу на всю жизнь понять, почему. Спасибо! Используя контрольный пример int nums = [3,2,4], int target = 6. Ожидаемый ответ = [1,2], данный ответ [0,0]

public int[] twoSum(int[] nums, int target) {
    int[] returnArray = new int[2];
    Map<Integer,Integer> numsHash = new HashMap<Integer,Integer>();
    for(int i=0;i<nums.length;i++){
        numsHash.put(nums[i],i);
    }

    int tempSum=target;
    for(int j=0;j<nums.length;j++){

        if(numsHash.containsKey(tempSum-nums[j])){
            returnArray[1]=numsHash.get(nums[j]);
            returnArray[0]=numsHash.get(tempSum-nums[j]);
            return returnArray;
        }
        tempSum=target;
    }
    return returnArray;
}

1 Ответ

1 голос
/ 21 марта 2019

Потому что вы проверяете все элементы Hashmap, сравнивая один элемент массива, который также включает в себя элемент, который вы ищете.В начале, когда элемент массива равен 3, вы ищете targetSum - nums[0], т. Е. 6-3=3 (тот же элемент).Очевидно, что 3 уже существует, и его индекс равен 0. Таким образом, вы получаете [0,0] в качестве результата.

Поэтому при проверке, находится ли ключ targetSum-nums[j] в HashMap, также проверьте, равен ли индекс результататакой же, как искомый индекс.Если индекс результата не совпадает с индексом искомого элемента, продолжайте поиск.В противном случае перейдите к следующей итерации.

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