1.链接
2.题目描述
给出一个整数数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2)组成的数组,需要满足 index1 小于index2.。注意:下标是从1开始的
保证给出的数组中只存在唯一解。
例如:
给出的数组为 [20, 70, 110, 150] , 目标值为90
返回一个数组 [1,2] ,因为 numbers _1+numbers _2=20+70=90numbers
1
+numbers
2
=20+70=90
你能想到 的做法吗?
数据范围:
1\leq len(numbers) \leq 10001≤len(numbers)≤1000
1\leq numbers_i , target \leq 10^91≤numbers
i
,target≤10
9
示例1
输入:
[3,2,4],6
复制
返回值:
[2,3]
复制
说明:
因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以输出[2,3]
3.题解
/**
* User:yang
* https://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f?tpId=117
*
*/
import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> m = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (m.get(target - nums[i]) != null) {
return new int[]{m.get(target - nums[i])+1, i+1};
}
m.put(nums[i], i);//当
}
return new int[]{0, 0};
}
// public int[] twoSum (int[] numbers, int target) {
// int[] array=new int[2];
// for (int i = 0; i < numbers.length-1; i++) {
// for (int j = i+1; j < numbers.length; j++) {
// if ((numbers[i]+numbers[j])==target){
// array[0]=i+1;
// array[1]=j+1;
// }
// }
// }
// return array;
// }
}