LeetCode- 1. 两数之和
题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回·他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
思考
- 正向思维:
- 要想得到target,就需要事先确定两个值,假设为num[i]、num[j]
- 由于题意说每种输入只会对应一个答案,则说明这两个值处于整数数组的不同位置。
- 所以使用两层循环依次遍历,即可确定在哪两个位置的整数之和等于target.
- 逆向思维:
- target是已知的,减去一个整数num[i],就能求出另一个整数,假设为tmp.
- 如果tmp在数组中,就能找到答案.
题解 1
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] res = new int[2];
for(int i = 0; i < nums.length; i ++) {
for(int j = i + 1; j < nums.length; j ++) {
if(nums[i] + nums[j] == target) {
res[0] = i;
res[1] = j;
break;
}
}
}
return res;
}
}
题解 2
class Solution {
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int[] res = new int[2];
for(int i = 0; i < nums.length; i ++) {
map.put(nums[i], i);
}
for(int i = 0; i < nums.length; i ++) {
int tmp = target - nums[i];
if(map.containsKey(tmp) && map.get(tmp) != i) {
res[0] = i;
res[1] = map.get(tmp);
break;
}
}
return res;
}
}