有序数组两数之和

题目:

给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。

函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

说明:

    返回的下标值(index1 和 index2)不是从零开始的。
    你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。

示例:

输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

看到这道题的时候,有一种明显的似曾相识的感觉,然而就是想不起来当初学到的那种思路,于是厚颜无耻地看了一眼自己以前的答案,瞬间秒懂,看来还是理解不深呐... ...

依据题意而言,假设最终答案为i 和 j之和,那么 j 等于 目标数 - i。所以,基本的思路就是将所有的数值及下标插入到hashmap中,然后再遍历一次数组,找出符合目标数 - i的下标,则大功告成。再仔细想一下其实还可以优化一下,代码如下:

代码:

class Solution {
    public int[] twoSum(int[] numbers, int target) {
        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};
            }
            map.put(numbers[i], i);
        }
        //throw new RuntimeException("无匹配结果");
        return new int[0];
    }
}
原文地址:https://www.cnblogs.com/wxdmw/p/13295162.html