LeetCode _1、两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

 

这道题的思路最开始就是暴力破解法

双重循环 遍历数组然后逐一比较 (设置不与自身比较的条件防止出bug) 题是做出来了数据量越大效率越低

看了一下答案 

思路大概是

利用寻差法(我自己编的)

一元一次方程  x +y = z

已知x 与 z 求y 无论求和还是求差都是查找 查找自然就想到 hash算法  

于是就有了以下解法

class Solution {
    public int[] twoSum(int[] nums, int target) {
  //构建容器
       Map<Integer, Integer> hashMap= new HashMap<Integer, Integer>();
    //遍历数据源
       for(int i = 0;i<nums.length;i++){
            // 判断容器中是否有对应数据
      if(hashMap.containsKey(target - nums[ i ])){
        //如果有的话 则有差值 为 
        return  new int [ 2 ]  { hasMap.get( arget - nums[ i ]) ,  i }
       }
      // 没有对应差值 以值为键  下标为值  
      // 先查询后插入 的原因是为了 避免 当前值为目标值一半的情况  自身以自身为目标  进行计算  即使得到接过依旧与预期不符  
      hashMap.put(nums[ i ], i)
    }
  // 未找到匹配组合
  return  new int [ 2 ];
    }
}

 

posted @ 2021-08-23 14:57  OTeam  阅读(45)  评论(0)    收藏  举报