题解 | #两数之和#

两数之和

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");
    }
    }
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务