题目:
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
方法一:
public int[] twoSum (int[] numbers, int target) {
// write code here
int[] index=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){
index[0]=i+1;
index[1]=j+1;
break;
}
}
}
return index;
}
方法二:
方法二 使用哈希表,时间复杂度为O(n)(使用c++)
分别扫描两次。1)将数组numbers中的元素保存到哈希表中 ;2)查找哈希表中是否存在元素 target-numbers[i]
import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
HashMap<Integer , Integer> map = new HashMap<>();
for(int i = 0; i < numbers.length; i++){
if(map.containsKey(target - numbers[i])){
//获取map.get(target - numbers[i])的value值,然后获取当前数组[i]的下标+1,返回
return new int[]{map.get(target - numbers[i]) , i+1};
}
else{
map.put(numbers[i] , i+1);
}
}
return new int[]{-1,-1};
}
}