题解 | #两数之和#
两数之和
http://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) { // write code here int[] ans = new int[2]; for(int index1 = 1; index1 <= numbers.length; index1++){ for(int index2 = index1 + 1; index2 <= numbers.length; index2++){ if(numbers[index1 - 1] + numbers[index2 - 1] == target){ ans[0] = index1; ans[1] = index2; return ans; } } } return null; } }HashMap反向索引快速定位到index,一次遍历就结束了。
Map<Integer, Integer> map = new HashMap(); for(int i = 0; i < numbers.length; i++){ if(map.get(target - numbers[i]) != null){ return new int[]{map.get(target - numbers[i]) + 1, i + 1}; }else{ map.put(numbers[i], i); } } return new int[]{-1, -1};

查看12道真题和解析