import java.util.Arrays
import java.util.HashMap
import java.util.Map
/**
* ref:https://leetcode-cn.com/problems/two-sum/
* 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
* 你可以按任意顺序返回答案。
* 示例 1:
* 输入:nums = [2,7,11,15], target = 9
* 输出:[0,1]
* 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
**/
public class TwoSumTarget {
public static void main(String[] args){
int[] array = new int[]{2,7,11,15}
System.out.println(Arrays.toString(findTwoSumTarget1(array,9)))
System.out.println(Arrays.toString(findTwoSumTarget2(array,9)))
}
/**
* 暴力破解:
* 两次for循环进行值的比较
* @param array
* @param target
* @return
*/
public static int[] findTwoSumTarget1(int[] array,int target) {
for(int i=0
for(int j=i+1
if(array[i]+array[j]==target){
return new int[]{i,j}
}
}
}
return new int[]{}
}
/**
* 采用额外的map数据来记录数组中存在的数据
* 然后迭代数组,从map中寻找target与当前迭代元素差值的元素是否存在,找到机返回
* @param array
* @return
*/
public static int[] findTwoSumTarget2(int[] array,int target) {
Map<Integer,Integer> dataIndexByArrayValue = new HashMap<>()
for(int i=0
if(dataIndexByArrayValue.containsKey(target-array[i])){
return new int[]{dataIndexByArrayValue.get(target-array[i]),i}
}
dataIndexByArrayValue.put(array[i],i)
}
return new int[]{}
}
}