题目
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
示例1
输入
[3,2,4],6
输出
[2,3]
思路
- 刚刚开始想用排序,二分方,但是返回的是索引,所以会造成索引下标发生变化不可行
- 最简单的就是暴力,两个循环解决
- 既然索引下标发生变化,就把下标和值一起记录
hash
import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
int length = numbers.length;
// key:值 value 下标
HashMap<Integer,Integer> targetMap = new HashMap<>(length);
int[] result = new int[2];
for(int i = 0; i< length; i++){
int temp = numbers[i];
if(targetMap.containsKey(target - temp)){
result[0] = targetMap.get(target - temp)+1;
result[1] = i+1;
return result;
}
targetMap.put(temp, i);
}
return result;
}
}
数组循环
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
int[] result = new int[2];
int length = numbers.length;
for(int i = 0; i< length-1; i++){
for(int j = i + 1; j< length; j++){
int first = numbers[i];
int second = numbers[j];
if(first + second == target){
result[0]= i+1;
result[1]= j+1;
}
}
}
return result;
}