【算法】【线性表】【数组】两数之和
1 题目
趁着 RocketMQ在打包,做道算法题。
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target
。
你需要实现的函数twoSum
需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0
到 n-1
。
样例 1:
输入:
numbers = [2,7,11,15]
target = 9
输出:
[0,1]
解释:numbers[0] + numbers[1] = 9
样例 2:
输入:
numbers = [15,2,7,11]
target = 9
输出:
[1,2]
解释:numbers[1] + numbers[2] = 9
2 解答
public class Solution { /** * @param numbers: An array of Integer * @param target: target = numbers[index1] + numbers[index2] * @return: [index1, index2] (index1 < index2) */ public int[] twoSum(int[] numbers, int target) { // write your code here int[] res = new int[2]; // 1、把他们都装进map里 Map<Integer, Integer> map = new HashMap(numbers.length); for (int i=0; i<numbers.length; i++) { map.put(numbers[i], i); } // 2、遍历,看他们的差是否在map里 在的话就返回结果了 for (int i=0; i<numbers.length; i++) { int num = numbers[i]; int minus = target - num; int existNum = map.getOrDefault(minus, -1); // 存在并且不是自己的话 if (existNum != -1 && existNum != i) { if (existNum < i) { res[0] = existNum; res[1] = i; } else { res[0] = i; res[1] = existNum; } break; } } return res; } }
加油