题解 | #两数之和#
两数之和
https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
/**
* [0,4,3,0],0输出了*/
// write code here
/* Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));*/
int[] res=new int[2];
//应该使用数组去存储。下标为数字,值为索引位置
Map<Integer , List<Integer>> map = new HashMap();
for (int i = 0; i < numbers.length; i++) {
//重复数则只使用前面的.
if (map.containsKey(numbers[i])){
List<Integer> integers = map.get(numbers[i]);
integers.add(i);
}
map.putIfAbsent(numbers[i],new ArrayList<>(Arrays.asList(i)));
}
for (int number : numbers) {
int other = target - number;
if (map.containsKey(other)){
Integer integer = map.get(other).get(0);
Integer integer1 = map.get(number).get(0);
if (other== number){
if (map.get(number).size()>1){
integer1 = map.get(number).get(1);
}
}
if (integer!=null && integer1!=null && integer>integer1){
res[0]=integer1+1;
res[1]=integer+1;
}else {
res[1]=integer1+1;
res[0]=integer+1;
}
}
}
return res;
}
}
