题目: 1. 两数之和
给定一个整数数组
nums
和一个整数目标值target
,请你在该数组中找出 和为目标值target
的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
解题思路
目前有两种思路解决:
1、两个for循环数组,计算数据是否为目标值,当得到结果后直接跳出循环,返回结果。
2、利用HashMap存储数据和数组下标,先判断map中是否有targe-当前值的数据,有则返回结果,没有则继续循环。
这里第二种方法在时间和空间上比第一种更好
解题过程
第一种:
java
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] results = new int[2];
boolean flag = false;
// 循环判断
for (int i = 0; i < nums.length; i++) {
if (target > 0 && nums[i] > target) {
continue;
}
if (target < 0 && nums[i] < target) {
continue;
}
for (int j = 0; j < nums.length; j++) {
if (i == j) {
continue;
}
if (nums[i] + nums[j] == target) {
results[0] = i;
results[1] = j;
flag = true;
break;
}
}
if (flag) {
break;
}
}
return results;
}
}
第二种:
java
class Solution {
public int[] twoSum(int[] nums, int target) {
if(nums.length < 2) {
return null;
}
HashMap<Integer, Integer> map = new HashMap<>();
int[] results = new int[2];
for (int i = 0; i < nums.length; i++) {
// 判断map中是否有结果值
if (map.containsKey(target - nums[i])) {
results[0] = map.get(target - nums[i]);
results[1] = i;
break;
}
// 讲数据和下标存入map
map.put(nums[i], i);
}
return results;
}
}