题解 | #两数之和#
两数之和
https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
方法1:遍历数组,暴力破解
解题思路:用两个for循环遍历数组,当numbers[i] + numbers[j] == target时,输出数的下标。如果不存在就返回空数组
#牛客网博客##牛客网在线编程#
解题思路:用两个for循环遍历数组,当numbers[i] + numbers[j] == target时,输出数的下标。如果不存在就返回空数组
注意:返回的下标是从1开始的
public int[] twoSum (int[] numbers, int target) {
// write code here
int[] res = new int[2];
if (numbers.length <= 0) {
return res;
}
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[i] + numbers[j] == target && i != j) {
res[0] = i + 1;
res[1] = j + 1;
}
}
}
return res;
}
// write code here
int[] res = new int[2];
if (numbers.length <= 0) {
return res;
}
for (int i = 0; i < numbers.length; i++) {
for (int j = i + 1; j < numbers.length; j++) {
if (numbers[i] + numbers[j] == target && i != j) {
res[0] = i + 1;
res[1] = j + 1;
}
}
}
return res;
}
方法2:HashMap
解题思路:利用HashMap存储数在numbers[]数组中的值和下标,然后通过for循环遍历数组,当前数为numbers[i],如果target - numbers[i]等于在HashMap中的key值,那么说明数组中存在两个和为target的数,返回值在数组中的下标。
解题思路:利用HashMap存储数在numbers[]数组中的值和下标,然后通过for循环遍历数组,当前数为numbers[i],如果target - numbers[i]等于在HashMap中的key值,那么说明数组中存在两个和为target的数,返回值在数组中的下标。
如果不存在就返回空数组。
注意:返回的下标从1开始。
public int[] twoSum (int[] numbers, int target) { // write code here int[] res = new int[2]; HashMap<Integer,Integer> hash = new HashMap<Integer, Integer>(); for (int i = 0; i < numbers.length; i++) { if (hash.containsKey(target - numbers[i])) { res[0] = hash.get(target - numbers[i]) + 1; res[1] = i + 1; } else { hash.put(numbers[i] , i); } } return res; }