解题思路:首先两层for循环暴力求解肯定对,但是不一定能通过,因为题目要求水间复杂度O(nlog(N));此题可以尝试哈希表的方法,将出现过的值都保存到map里,遍历每个值的时候,假设当前值满足,看一下map里是否存在target-arr[i];若存在则就是我们要找的值,若不存在继续找下一对,时间复杂度O(N),空间复杂度O(N)。
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[] result = new int[2];
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < numbers.length; i++) {
if (map.containsKey(target - numbers[i])) {
result[0] = map.get(target - numbers[i]);
result[1] = i + 1;
break;
} else {
map.put(numbers[i], i + 1);
}
}
return result;
}
}