解决思路
查找表 Map

建立一个查找表map来保存元素,key是元素,value是对应的索引
第一步将所有元素放入查找表map
但是如果两个元素值相同,第二次的索引会覆盖第一次的索引,从而查找数据不对
例如 [4 4] 8这种情况,就无法找到正确的答案
或者[3 2 4] 6这种情况也不对
改进
不能把所有的元素都放在map中
- 遍历到v的时候

- 只查找v前面的元素是否有target-v
- 只将v前面的所有元素放入查找表

- 如果之前的查找表有,则找到了解
- 如果查找失败,将v也纳入查找表中,继续查看下一个元素
- 这样即使覆盖了相同的元素,也不会影响
public int[] twoSum(int[] nums, int target) {Map<Integer,Integer> map = new HashMap<>();for(int i=0;i<nums.length;i++){//计算当前的补数int complement = target - nums[i];//如果之前的map中有补数 直接返回if(map.containsKey(complement)){//注意先写补数的位置return new int[]{map.get(complement),i};}map.put(nums[i], i);}return null;}//time O(n)//space O(n)

