package com.leetcode.twosum;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
/**
* 题目:给定一个整数数组 nums 和一个目标值 target。 请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 eg:nums =
* [2, 7, 11, 15], target = 9 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素 因为 nums[0]
* + nums[1] = 2 + 7 = 9,所以返回 [0, 1]
*
* @author hexiaoli 思考:1)不可重复性,用到hashmap存储数据。
*
*/
public class TwoIntegerSum {
public static int[] twoSum(int[] nums, int target) {
// 辅助
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
// target= nums[i]+nums[j]
int completement = target - nums[i];
// 如果map中两个都包含,则找到。
if (map.containsKey(completement) && (map.get(completement) != i)) {
return new int[] { map.get(completement), i };
}
map.put(nums[i], i);
}
return null;
}
public static void main(String[] args) throws IOException {
System.out.println("请数组数组元素,以空格隔开");
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String inputstr = input.readLine();
String[] inputstrs = inputstr.split(" ");
System.out.println();
int[] nums = new int[inputstrs.length];
for (int i = 0; i < nums.length; i++) {
nums[i] = Integer.valueOf(inputstrs[i]);
}
System.out.println("请输入目标值");
BufferedReader input1 = new BufferedReader(new InputStreamReader(System.in));
String inputstr1 = input1.readLine();
int target = Integer.parseInt(inputstr1);
int[] result = twoSum(nums, target);
for (int i : result) {
System.out.println(i);
}
}
}