【每日一道算法题系列】
思路:
1 暴力破解是比较容易想到的方式,双遍历,一层遍历决定初始元素,第二层遍历决定目标元素(时间复杂度:O(n平方),空间复杂度:O(1))
2 哈希表,将遍历过的数据存入哈希表中,每次拿到新的元素,从哈希表中进行匹配,是一种空间换时间的思想(时间复杂度:O(n),空间复杂度:O(n))
1 暴力破解
public int[] twoSum1(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];
}
2 哈希表
public int[] twoSum2(int[] nums, int target) {
//定义哈希表
Map<Integer, Integer> memory = new HashMap();
//循环遍历哈希表
for(int i = 0; i < nums.length; i++) {
//如果匹配到目标数据,返回结果
if(memory.containsKey(target - nums[i])) {
return new int[] {memory.get(target - nums[i]), i};
}
else {
//如果没有目标数据,将数据放入到哈希表中
memory.put(nums[i], i);
}
}
return new int[0];
}