题目:
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 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]; } }