题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
解法一:暴力解法 for循环遍历查找。时间复杂度是O(n2),空间复杂度是O(1)。
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){
return new int[]{i,j};
}
}
}
return new int[0];
}
解法二:使用map记录数组的值和下标进行查找。时间复杂度是O(n),空间复杂度是O(n)。
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
int x=nums[i];
if(map.containsKey(target-x)){
int index=map.get(target-x);
return new int[]{i,index};
}
map.put(x,i);
}
return new int[0];
}
这个题可以很明显的看到 空间换时间 。