本题难度:
简单
思路一:
两层for循环,在给定的整型数组nums中先选定一个数组元素,并依次判断其后续元素是否满足与之和等于目标值,若均不满足,则选定下一个数组元素,并重复上述操作,直到找到两个目标数组元素下标值并返回。
思路一代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
for(int i = 0; i < nums.length - 1; 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];
}
}
思路一复杂度:
时间复杂度T(n)=O(n^2)
空间复杂度S(n)=O(1)
思路二:
运用哈希表,将数组元素的值作为哈希表的关键字,将数组元素的数组下标作为哈希表的值,以方便返回结果。在遍历给定数组的同时,判断哈希表中是否有满足条件的元素,若有则返回,否则将正在遍历的值放入哈希表内,并依次向下遍历,重复上述操作,直到找到结果。
思路二代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
for(int i = 0; i < nums.length; ++i){
if(hashtable.containsKey(target - nums[i]))
return new int[]{hashtable.get(target - nums[i]), i};
else
hashtable.put(nums[i], i);
}
return new int[0];
}
}
思路二复杂度:
时间复杂度T(n)=O(n)——只要一次遍历
空间复杂度S(n)=O(1)