Couple Sum返回语句的解释和替代方法



我在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};

正在做,也许提供了一种替代的写作方式?

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

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<strong键是差异。假设>A[0]为12,值将为12_0

最新更新