描述
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)
数据范围:2\leq len(numbers) \leq 10^52≤len(numbers)≤105,-10 \leq numbers_i \leq 10^9−10≤numbersi≤109,0 \leq target \leq 10^90≤target≤109
要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)
示例1
输入:
[3,2,4],6
复制返回值:
[2,3]
复制说明:
因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以返回[2,3]
示例2
输入:
[20,70,110,150],90
复制返回值:
[1,2]
复制说明:
20+70=90
import java.util.HashMap;
public class Solution {
public int[] twoSum(int[] numbers, int target) {
int n = numbers.length;
int[] result = new int[2];
//map里面放 键为target-每个数的结果 值为下标
//每次放入的时候看是否包含 当前值
//有的话说明当前值和已包含的值下标的那个元素为需要的结果
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0;i<n;i++){
if(map.containsKey(numbers[i])){
result[0] = map.get(numbers[i])+1;
result[1] = i+1;
break;
}
else{
map.put(target - numbers[i], i);
}
}
return result;
}
}
此题和leetcode上有所不同,leetcode上下标已改为从0开始