import java.util.HashMap;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
/******************************************************************************************************/
// 以下方法仅限于数据量不大的情况下可以使用!!!
/*
// 定义一个偏移量
int p = 1;
// 定义一个整型变量,用于存放临时数据
int val = 0;
// 定义一个整型数组,用于存放最终的返回结果
int[] rs = new int[2];
for (int i = 0; i < numbers.length; i++) {
val = numbers[i]; // 获取一个数
while ((i + p) < numbers.length) {
if ((val + numbers[i + p]) == target) { // 如果相等,那再好不过了,直接退出循环
rs[0] = i + 1;
rs[1] = i + p + 1;
return rs;
}
else {
p++; // 继续向后寻找,直到找到或者数组越界
}
}
// 可以确定,这个数组中真的没有一个数与当前位置上的数相加等于 target
p = 1; // 别忘了重新将 p 值置为 1
}
return rs;
*/
HashMap<Integer, Integer> hm = new HashMap<>(); // 存放的是 (numbers[i], i)
int val = 0; // 定义一个整型变量,用于存放临时数据
int[] rs = new int[2]; // 定义一个整型数组,用于保存最终的返回结果
for (int i = 0; i < numbers.length; i++) { // 依次遍历 numbers 数组中的元素
val = numbers[i];
if (hm.containsKey(target - val)) { // 如果 HashMap 中存放了与当前数相加为 target 的数
rs[0] = hm.get(target - val) + 1;
rs[1] = i + 1;
break;
}
else { // 如果 HashMap 中没有存放与当前数组相加为 target 的数
hm.put(numbers[i], i); // 将当前数 put 到 HashMap 中
}
}
return rs;
}
}