
给定一个int类型一维数组 a[],和一个int类型的数值 b。编写一个程序,判断数组中有没有两个数(a[i],a[j])的和等于b,如果存在,返回两个数在a数组中的下表(return new int[]={1,2}),如果没有返回-1(return new int[]={-1,-1})。
算法:用查找表解决问题
package club.test;
import java.util.HashMap;
import java.util.Map;
/**
* @author jiajia
*/
public class TestMain3 {
public static void main(String[] args) {
int[] a=new int[]{1,2,3,9};
int step=11;
int[] res=index(a,step);
System.out.println(res[0]+" & "+res[1]);
}
public static int[] index(int[] a,int step) {
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=0;i<a.length;i++) {
if(map.containsKey(step-a[i]))
return new int[] {map.get(step-a[i]),i};
else
map.put(a[i],i);
}
return new int[] {-1,-1};
}
}