我们为什么要在这个程序中获取和放入值?

问题描述 投票:0回答:1

可以解释一下为什么我们在 if 条件之后使用 put 吗? 实际上,我现在存储了先前的值,但没有分配它,输出是 (0,0)。

public class 2Sum {
    public static void main(String[] args) {

        int[] arr = { 11, 3, 7, 19, 14, 2 };

        int target = 17;

        int[] num = new int[2];

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

        for (int i = 0; i < arr.length; i++) {
            int sno = target - arr[i];
            if (map.containsKey(sno)) {
                num[0] = map.get(sno);
                num[1] = i;
            }
            map.put(arr[i], i); //Why do we put after exiting the if condition 
        }
        System.out.println(num[0] + " " + num[1]);
    }

}

需要明确解释为什么我们在 if 条件之后使用 put。

java sum
1个回答
0
投票

//为什么退出if条件后要放

实际上,没有什么特别的理由把它放在那里。正如所写,您可以将其放在条件之前:

    for (int i = 0; i < arr.length; i++) {
        int sno = target - arr[i];
        map.put(arr[i], i);  // Before.
        if (map.containsKey(sno)) {
            num[0] = map.get(sno);
            num[1] = i;
        }
        map.put(arr[i], i);
    }

或者甚至在一个单独的、先前的循环中:

    for (int i = 0; i < arr.length; i++) {
        map.put(arr[i], i);
    }

    for (int i = 0; i < arr.length; i++) {
        int sno = target - arr[i];
        if (map.containsKey(sno)) {
            num[0] = map.get(sno);
            num[1] = i;
        }
        map.put(arr[i], i);
    }

该语句的要点是用可以找到特定值的索引来填充

map

将其放在条件语句之后的唯一原因是条件语句包含

break
:

    for (int i = 0; i < arr.length; i++) {
        int sno = target - arr[i];
        if (map.containsKey(sno)) {
            num[0] = map.get(sno);
            num[1] = i;
            break;  // HERE
        }
        map.put(arr[i], i);
    }

这里的区别在于,当找到解决方案时立即停止,而不是继续处理数组中的后续条目。如果您有一个非常大的

arr
,这可能会使代码更快,因为一旦找到解决方案,就没有必要将内容放入
map
,因为您不会在解决方案中使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.