两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
暴力法
class Solution {
public int[] twoSum(int[] nums, int target) {
int n = nums.length;
for(int i =0; i<n;i++){
for(int j=i+1;j<n;j++){ // 注意j只要是大于i的,不需要重新匹配了
if(nums[i]+nums[j]==target){
return new int[]{i,j};
}
}
}
return new int [0];
}
}
哈希表法
class Solution {
public int[] twoSum(int[] nums, int target) {
if (nums == null || nums.length == 0){
return new int[0];
}
// 把数据添加到哈希表中
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
map.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
int x = nums[i];
// 哈希查找
if (map.containsKey(target - x)) {
int index = map.get(target - x);
// i 和 index 不是同一个元素,同一个元素不能使用两次
if (i != index){
return new int[]{i, index};
}
}
}
return new int[0];
}
}