初步想法是拿到一个数,在剩余的数中找target减这个数的值
public int[] twoSum(int[] nums, int target) {
if (nums == null){
return null;
}
int[] array = new int[2];
for (int i = 0; i < nums.length; i++){
int value = nums[i];
int after = target - value;
for (int j = i + 1; j < nums.length; j++){
if (nums[j] == after){
array[0] = i;
array[1] = j;
return array;
}
}
}
return array;
}
各项数据都很平庸
因为题目假设只有一种答案,又因为如果数组内有相同的数字,那么一定保存的是后一个的序号,即使target是某个数的两倍,也可以解出答案
public int[] twoSum(int[] nums, int target) {
if (nums == null){
return null;
}
int[] array = new int[2];
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++){
map.put(nums[i],i);
}
for (int j = 0; j < nums.length; j++){
int after = target - nums[j];
if (map.containskey(after) && map.get(after) != i){
array[0] = i;
array[1] = map.get(after);
return array;
}
}
return array;
}
也可以一次遍历
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
刚开始想到了HashMap去保存,但是考虑到有重复元素覆盖索引,所以用的暴力查找的办法,后面看了题解才发现其实可以使用HashMap的