Java 对和返回语句的解释和替代方法

Java 对和返回语句的解释和替代方法,java,hashmap,Java,Hashmap,我在做有关消防规范的练习题,问题是: 给定一个整数数组,找到两个数字,使它们相加为一个特定目标。 方法coupleSum应该返回数组中两个数字的索引,其中index1必须小于index2。 请注意,索引不是基于零的,您可以假设每个输入正好有一个解决方案。目标线性运行时和空间复杂性 给出的解决方案是: public static int[] coupleSum(int[] numbers, int target) { HashMap<Integer, Integer> map

我在做有关消防规范的练习题,问题是:

给定一个整数数组,找到两个数字,使它们相加为一个特定目标。 方法coupleSum应该返回数组中两个数字的索引,其中index1必须小于index2。 请注意,索引不是基于零的,您可以假设每个输入正好有一个解决方案。目标线性运行时和空间复杂性

给出的解决方案是:

public static int[] coupleSum(int[] numbers, int target) {
    HashMap<Integer, Integer> map = new HashMap<>();
    for(int i=0; i < numbers.length; i++){
        int n = numbers[i];
        if(map.containsKey(n)){
            return new int[]{map.get(n), i+1};
        } else {
            map.put(target-n, i+1);
        }
    }
    return null;
}

是否正在做,或者是否提供了另一种编写方法?

因此,要编写更可读、更易懂的代码,您可以查看下面的代码片段。逻辑与您的问题中提到的相同,但我们只是维护一个数组来存储所需的结果

    HashMap<Integer,String> map = new HashMap<Integer,String>();
    int[] res = new int[2];
    //B=target
    for(int i=0; i<A.length; i++) {
        int key = A[i];
        int diff = B-key;
        if(!map.containsKey(key) && !map.containsKey(diff)) {
            map.put(diff, key+"_"+i);
        } else if (map.containsKey(key)) {
            String val = map.get(key);
            res[0] = Integer.parseInt(val.split("_")[1])+1;
            res[1] = i+1;
            return res;
        }
    }
    return new int[0];
HashMap map=newhashmap();
int[]res=新的int[2];
//B=目标

对于(int i=0;iIt检查
map
是否包含键
n
numbers
)的元素,如果包含,则返回一个数组,其中map的值位于键
n
,索引位于
numbers
的位置,加上一个。什么样的“备选方案”你在寻找吗?也许是一种在该区域不使用return语句的情况下编写它的方法?这将导致最后的null语句成为我们要返回的语句。我想,你可以设置一个值并
中断
,尽管这对我来说似乎更为混乱。早期返回的价值在于,你可以在返回后立即停止思考它查看
return
而不是找出你从哪里中断,向下扫描,看看还会发生什么(如果有的话)。它确实更混乱,尽管它的编写方式返回新的int[]{map.get(n),i+1};对我来说似乎很不寻常。也许我认为看到它在没有返回的情况下编写会让我更加关注这个问题。我不确定它有什么“不寻常之处”;这就是数组文本在Java中的工作方式。
    HashMap<Integer,String> map = new HashMap<Integer,String>();
    int[] res = new int[2];
    //B=target
    for(int i=0; i<A.length; i++) {
        int key = A[i];
        int diff = B-key;
        if(!map.containsKey(key) && !map.containsKey(diff)) {
            map.put(diff, key+"_"+i);
        } else if (map.containsKey(key)) {
            String val = map.get(key);
            res[0] = Integer.parseInt(val.split("_")[1])+1;
            res[1] = i+1;
            return res;
        }
    }
    return new int[0];