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 ];
}
}

浙公网安备 33010602011771号