题目:
1. 两数之和
解法:
解法一: 直接暴力法
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 null;
}
解法二: 遍历一次数组即可. 新建一个HashMap, 存储的key-v结构是(数组的值 ==> 数组的下标) 然后每次用 target 减去 遍历的数组的元素, 判断HashMap中是否包含该key, 如果包含则返回下标, 结束.
public int[] twoSum(int[] nums, int target) {
if((nums == null) || (nums.length < 2)){
return null;
}
Map<Integer , Integer> map = new HashMap<>();
map.put(nums[0], 0);
for(int i=1; i< nums.length; i++){
int tmp = target - nums[i];
if(map.containsKey(tmp)){
return new int[]{map.get(tmp), i};
}else{
map.put(nums[i], i);
}
}
return null;
}