题目:两数之和
要求:给定一个整数数组 nums
和一个整数目标值 target
,在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
过程描述举例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
方法一:暴力法
class Solution{
public int[] twoSum(int[] nums,int target){
for(int i=0;i< nums.length;i++){
for(int j=i+1;j< nums.length;j++){
if(nums[i]+nums[j]==target){
int[] result=new int[]{i,j};
return result;
}
}
}
return null;
}
}
方法二:哈希表求解
思路出发点:降低时间复杂度
将数组内容存放在哈希表中,遍历表中数据时,用当前值与目标值做减法,依次往后查找有无与减法差值相匹配的项
class Solution{
public int[] twoSum(int[] nums,int target){
HashMap<Integer,Integer> map=new HashMap<>();
//将数组内容放入表中
for(int i=0;i< nums.length;i++){
int result=target-nums[i];//做差
if(map.containsKey(result)){
int[] arr=new int[]{map.get(result),i};//get()方法:获取指定 key 对应对 value。
return arr;
}
map.put(nums[i],i );
}
return null;
}
}