给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
解法一:暴力破解法
import java.util.*;
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
int[] ans = new int[2];
for(int i=0;i<numbers.length;i++){
for(int j=i+1;j<numbers.length;j++){
if(int[i]+int[j]==target){
ans[0]=i+1;
ans[1]=j+1;
return ans;
}
}
}
return ans;
}
}
复制代码
解法二:哈希表
首先我们定义一个哈希表map,将number[i]进行标记,即map[number[i]]=i
然后使用一层for循环查询map里面有没有target-number[i]
如果有就返回map[target- number[i]] + 1和i + 1
如果没有就查询下一个
复制代码
public class Solution {
/**
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0;i<numbers.length;i++){
if(map.containsKey(target-numbers[i])){
return new int()[map.get(target-numbers[i])+1,i+1];
}else{
map.put(numbers[i],i);
}
}
return new int[2];
}
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END