【算法】【线性表】两数之和

发布时间 2023-12-13 07:27:28作者: 酷酷-

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;
    }
}

加油