给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?
原题如上
我参考了题解,如下(别人写的,我是搬运工):
我写的代码如下(如有不完善的地方,希望小伙伴指出):
package t1;
import java.util.HashMap;
import java.util.Scanner;
public class ADD {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入数组长度:");
int len = sc.nextInt();//给定数组长度
int[] nums = new int[len]; ;
System.out.println("请输入数组的值:");
for (int i = 0; i < len; i++) {
int a = sc.nextInt();
nums[i] = a;
}
System.out.print("请输入target的值:");
int target = sc.nextInt();//设定目标值
int s = 0;
int a = 0;
HashMap<Integer, Integer> hm = new HashMap<>();//创建HashMap集合
for (int i = 0; i < len; i++) {
s = target - nums[i] ;
if (hm.containsKey(s)) {
a = i;//将下标存下来
break;
}
hm.put(nums[i], i);//不满足if条件时,将数组元素和下标加入到hm中
//元素为key值,下标为value
}
for(int i = 0;i < len;i++) {//循环遍历找到s的下标
if(nums[i]==s){
System.out.println("["+i+","+a+"]");
break;
}
}
}
}
运行结果如下: