- 无脑暴力
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];
}
- 把数组里的数放到map里,key是数组下标值,value是数组值。一个for循环遍历数组,target一一减去,如果遇到value相等,且key值不等,就符合
public int[] twoSum1(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
int[] arr = new int[2];
for (int i = 0; i < nums.length; i++) {
map.put(nums[i],i);
}
for (int i = 0; i < nums.length; i++) {
if(map.containsKey(target-nums[i])&&map.get(target-nums[i])!=i){
arr[0] = i;
arr[1] = map.get(target-nums[i]);
}
}
return arr;
}
- leetcode的版本,不用像我的那样遍历一遍把所有的值和下标都放进map。它的思路是一边遍历一边放map里。当匹配的时候 直接返回
public int[] twoSum11(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if(map.containsKey(target-nums[i])){
return new int[]{i,map.get(target-nums[i])};
}
map.put(target-nums[i],i);
}
return new int[0];
}