题解 | #两数之和#
两数之和
http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
字典的用法
- 当我们查找两数之间的差时,我们是带着已知的答案去寻找问题,所以是可以通过字典的方式快速定位答案的。
如果直接通过暴力查找,那么时间复杂度是O(n^2),通过字典查找则降为O(n)。
字典的实现就是通过key-value键值对来进行快速查找,可以用HashMap来进行实现。
具体代码如下:import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
// //1、暴力遍历
// int len = numbers.length;
// int[] twoSum = new int[2];
// for(int i = 0; i < len; i++){
// for(int j = i+1;j < len ;j++){
// if(numbers[i]+numbers[j] == target){
// twoSum[0]=i+1;
// twoSum[1]=j+1;
// return twoSum;
// }
// }
// }
// return twoSum;
//2、使用hashMap查找互补的数字的下标
int len = numbers.length;
Map<Integer,Integer> map = new HashMap<>();
for(int cur=0,tmp;cur<len;cur++){
tmp = target - numbers[cur];
if(map.containsKey(tmp)){
return new int[]{map.get(tmp)+1,cur+1};
}
map.put(numbers[cur],cur);
}
throw new RuntimeException("results not exists");
}
}