【问题标题】:Couple Sum return statement explanation and alternative methodCouple Sum return 语句解释和替代方法
【发布时间】:2021-05-04 22:00:30
【问题描述】:

我在 Firecode 上做练习题,问题是:

给定一个整数数组,找到两个数字,使它们相加为一个特定的目标。 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;
}

你能解释一下吗

if(map.containsKey(n)){
                return new int[]{map.get(n), i+1};

正在做并且可能提供另一种写作方式?

【问题讨论】:

  • 它正在检查 map 是否包含键 nnumbers 的元素),如果包含,则返回一个数组,其中包含键 n 处的映射值和索引在它发生的numbers 中加一。你在寻找什么样的“替代品”?
  • 也许是一种在该区域不使用 return 语句的方式来编写它?这将导致最后的 null 语句成为我们返回的内容。
  • 你可以设置一个值和break,我想,虽然这对我来说似乎更混乱。提前退货的价值在于,您可以在看到return 后立即停止思考,而不是弄清楚您从哪里中断,向下扫描,看看还会发生什么(如果有的话)。
  • 确实比较麻烦,虽然它的写法 return new int[]{map.get(n), i+1};对我来说似乎不寻常。也许我认为在没有返回的情况下看到它会让问题更加点击我。
  • 我不确定它有什么“不寻常”;这就是数组字面量在 Java 中的工作方式。

标签: java hashmap


【解决方案1】:

为了写出更易读易懂的代码,你可以看看下面的sn-p。逻辑与您的问题中提到的相同,但我们只是维护一个数组来存储所需的结果。

    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的值是数组元素及其各自索引的组合,HashMap的key是区别。 假设 A[0] 是 12,值将是 12_0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2015-09-21
    • 2017-02-09
    相关资源
    最近更新 更多