Вернуть целочисленный массив не работает должным образом - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь вернуть массив из оператора else, но он не работает.

Вот проблема, которую я пытаюсь решить.

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

Это решение не 't работает и возвращает {0,10}

class Solution {
    public int[] twoSum(int[] nums, int target) {
        if(nums.length == 0) return null;
        int[] numss = {0, 10};
        HashMap<Integer, Integer> s = new HashMap<Integer, Integer>();
        for(int i = 0; i < nums.length; i++) {
            if(s.getOrDefault(nums[i], 0) == 0) {
                s.put(target-nums[i], i);
            }
            else {
                numss[0] = i; 
                numss[1] = s.get(nums[i]);
                return numss;
            }
        }
        return numss;
    }
}

Это решение работает (только то, что оценивает оператор if, оценивается ниже)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        if(nums.length == 0) return null;
        int[] numss = {0, 10};
        HashMap<Integer, Integer> s = new HashMap<Integer, Integer>();
        for(int i = 0; i < nums.length; i++) {
            if(s.getOrDefault(nums[i], -1) == -1) {
                s.put(target-nums[i], i);
            }
            else {
                numss[0] = i; 
                numss[1] = s.get(nums[i]);
                return numss;
            }
        }
        return numss;
    }
}

Это решение работает

class Solution {
    public int[] twoSum(int[] nums, int target) {
        if(nums.length == 0) return null;
        HashMap<Integer, Integer> s = new HashMap<Integer, Integer>();
        for(int i = 0; i < nums.length; i++) {
            if(s.getOrDefault(nums[i], -1) != -1) {
                    return new int[]{ i, s.get(nums[i]) };
                }
                s.put(target - nums[i], i);
        }
        throw new IllegalArgumentException("No two sum solution");
    }
}

Почему мой оператор else не может вернуть массив и остановить функцию или, по-видимому, оператор if-else не работает даже должным образом?

1 Ответ

0 голосов
/ 22 октября 2019

Фактическое значение, которое вы ищете во второй итерации, находится в индексе 0 (2). Таким образом, в вашем первом примере код будет помещаться в блок структуры хеша, а не возвращать решение. В другом примере код входит в правильный блок и возвращает решение.

...