给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum
暴力解法,直接按顺序遍历
class Main{
public int[] twoSum(int[] nums, int target) {
for(int i = 0; i < nums.length; i++){
for(int j = i+1; j < nums.length; j++){
if((nums[i] + nums[j]) == target){
return new int[]{i, j};
}
}
}
return null;
}
哈希映射,这样想,假设题目要求的是找到和为10的数,遍历过第一个4以后,可以将这个数修改为6,下面就是看哈希表里有没有6。
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; i++){
if(map.containsKey(nums[i])){
// 当遍历到第二个数时,由于map中已存在,就是通过target减去第一个数得到的
// 这时,只要取出第一个数的下标,和当前第二个数的下标返回即可
return new int[]{map.get(nums[i]), i};
}
map.put(target - nums[i], i); // key 放第二个数的值,value放第一个数的下标
}
return null;
}
}