欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不

程序员文章站 2022-07-14 14:32:15
...

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

LeetCode上的一道题目,我的第一想法是暴利循环,两层for循环解决,但这是效率最低的方法。
看到讨论区,发现速度效率最高的方法是使用hashMap。

class Solution {
    public int[] twoSum(int[] nums, int target) {
      Map<Integer,Integer> map = new HashMap<>();
      for(int i=0;i<nums.length;i++){
      	int temp = target - nums[i];
      	if(map.containKey(temp)){
      		return new int[]{map.get(temp),i};
      	}
      	map.put(num[i],i);
      }
    }
}

讲述下其中思想:

“target是数组里面两个整数的和,且每种输入只会对应一个答案,一个数不能用两次。”告诉我们:target在数据里面,只会出现一种组合答案。比如target=6,则数组假如有2+4=6了,那么绝对不会再出现1和5另一种组合。
key代表值,value代表下标
既然target是两个数的和,那么就让target减去nums[i],差为temp。
每次相减之后,就去map中寻找key==temp的键值对(这里map就相当于存储所有的差),只要map里面有,那么就返回当前的下标i和key为temp所对应的的value。否则,将nums[i]存到map,如此循环往复。

相关标签: 算法题目实操

推荐阅读