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