题解 | #两数之和#
两数之和
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; } }