思路
刚开始的时候想着用HashMap存储数组值和对应下标,但是后来想歪了,不知道怎么处理一些数组值相等的情况,因为刚开始存储Map的时候,相同的值会被覆盖掉,后来看了题解,发现可以先处理完数据之后,再存入Map判断这个target-num[i]的值有没有出现过。
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
代码
package Hash;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class _1两数之和 {
public static int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
int index[]=new int[2];
for(int i=0;i<nums.length;i++) {
int t=target-nums[i];
if(map.containsKey(t)) {
index[0]=map.get(t);
index[1]=i;
}
map.put(nums[i], i);
}
// System.out.println(index[0]+" "+index[1]);
return index;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();
int nums[]=new int[n];
for(int i=0;i<n;i++) {
nums[i]=sc.nextInt();
}
int target=sc.nextInt();
twoSum(nums,target);
}
}
}
总结
不要被陷入固有思维中,想着先存储Map,有的时候可以边处理数据边存储数据到Map中