题目:给定一个整数数组nums和一个整数目标值targer,在该数组中找出和为目标值target的那两个整数,并返回他们的数组下标。
方法一:双重循环
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){
return new int[][]{i,j};
}
}
}
return null;
}
}
最坏的情况是数组中的任意两个数都要匹配一次,时间复杂度是O(N*N),N是数组中的元素数量;空间复杂度是O(1)。
方法二:使用hash表
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> hashMap = new HashMap<Integer,Integer>();
for(int i = 0; i < nums.length; i++){
if(hashMap.containsKey(targer - nums[i])){
return new int[]{hashMap.get(targer - nums[i]),i};
}
hashMap.put(nums[i],i);
}
return null;
}
}
N 是数组中的元素数量
时间复杂度:O(N)。对于每一个元素 ,我们可以 依次寻找 target - 每一个元素的值。
空间复杂度:O(N)。主要为哈希表的开销。