【发布时间】:2019-04-04 05:07:59
【问题描述】:
Leetcode #167 和 #1 几乎一样,但是为什么我不能只添加一个 if 条件呢?
问:给定一个已经按升序排序的整数数组,找到两个数字,使它们加起来等于特定的目标数字。
函数 twoSum 应该返回两个数字的索引,使得它们相加到目标,其中 index1 必须小于 index2。
注意:
您返回的答案(index1 和 index2)不是从零开始的。 您可以假设每个输入都只有一个解决方案,并且您不能两次使用相同的元素。
示例: 输入:数字 = [2,7,11,15],目标 = 9 输出:[1,2]
The sum of 2 and 7 is 9.
Therefore index1 = 1, index2 = 2.
我的代码:
class Solution {
public int[] twoSum(int[] numbers, int target) {
for (int i = 1; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[j] == target - numbers[i]) {
if(numbers[i] < numbers[j])
return new int[] { i, j };
}
}
}
return null;
}
}
为什么我总是返回 null?我的错误在哪里?如何解决?
【问题讨论】:
-
数组索引以
0零开头,而不是11 - 检查循环起始值; (只是为了便于阅读,number[i] + number[j] == target会更自然检查,因为它类似于请求的内容) -
我不知道。你应该学会调试你的代码。你为什么在
i=1而不是i=0开始你的循环?仅仅因为预期输出不是基于零的并不意味着输入也不是。 -
您的目标是 9,并且您从索引 1 开始循环数组,因此它从 7 开始,然后尝试添加下一个索引值,因此您没有得到所需的输出。如果从 0 开始循环,则在第 0 索引处的值为 2,第 1 索引处的值为 7,那么您将获得所需的输出。
标签: java