【每日一道算法题系列】
分析:
1 很容易想到的是暴力破解的方式,两次遍历,第一遍历是选择数据,第二次遍历寻找目标
2 第二种方式就是使用哈希表,通过把已经遍历过的数据放入到哈希表中,然后通过目标来获取到最终的结果,是一种空间换时间的思想
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];
}