题解 | #两数之和#
两数之和
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"); } }