这题的做的不够聪明,精华题解的答案比较聪明,可以减少遍历的次数,优化空间占用。
import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
Map<Integer, List<Integer>> map = new HashMap();
for(int i = 0; i < numbers.length; i++) {
List<Integer> list = map.computeIfAbsent(numbers[i], (k) -> new ArrayList<Integer>());
list.add(i);
}
int[] result = new int[2];
for(int i = 0; i < numbers.length; i++) {
int n = target - numbers[i];
List<Integer> list = map.get(n);
if (list == null) {
continue;
}
if (n == numbers[i]) {
if (list.size() > 1) {
result[0] = list.get(0) + 1;
result[1] = list.get(1) + 1;
break;
} else {
continue;
}
}
result[0] = i + 1;
result[1] = list.get(0) + 1;
break;
}
return result;
}
}
精华答案很不错
import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
int n = numbers.length;
int[] res = {-1, -1};
//遍历数组
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
//判断相加值是否为target
if (numbers[i] + numbers[j] == target) {
res[0] = i+1;
res[1] = j+1;
//返回值
return res;
}
}
}
return res;
}
}