问题:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
该题核心是查找,那么和查找有关的,我们优先想到的就是通过hashmap来进行。那么通过hashmap来进行,那么就要选择key-value,首先想到的是数组下标作为key,数组值作为value,但是当我们这样做以后发现是无法解决问题的。那么就颠倒key,value,之后发现问题迎刃而解。
代码:
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int[] twoSum(int[] nums, int target){
Map<Integer,Integer> myMap = new HashMap<Integer,Integer>(); //
for(int i=0 ;i<nums.length;i++){
myMap.put(nums[i],i); //将数组放入hashmap中倒叙存放,因为我们通过target-nums[1]已知的是值,问题要的是下标。
}
for(int i =0;i<nums.length;i++){
int temp = target-nums[i];
if(myMap.containsKey(temp)&&myMap.get(temp)!=i){
return new int[]{i,myMap.get(temp)};
}
}
return null;
}
}
下一级挑战:
三数之和
四数之和
两数之和 II - 输入有序数组
两数之和 III - 数据结构设计
和为K的子数组
两数之和 IV - 输入 BST
小于 K 的两数之和
原文地址:https://www.cnblogs.com/gmzqjn/p/11671047.html