题目:略
思路:这道题算是简单题,大概就是在给定的数组中找目标数,找到返回数组下标,米有找到就返回0。
看到题的最初想法有:
暴力解法(但是这种解法不考虑AC的时间和空间的要求)
import java.util.*;
public class Main {
static int[] data = new int[100005];
public static void main(String[] args) {
//int[] data = new int[100005];
Scanner in = new Scanner(System.in);
//位置个数
int n = in.nextInt();
in.nextLine();
//各个通道的瓶子数
for(int i = 0; i < n; ++i) {
data[i] = in.nextInt();
}
//发球次数
int m = in.nextInt();
int[] res = new int[m];
int cn = 0;
//int low = 0, high = data.length-1;
for(int j = 0; j < m; ++j){
int target = in.nextInt();
for (int i = 0; i < data.length; ++i) {
if (data[i] == target) {
res[cn] = i + 1;
cn++;
} else {
res[cn] = 0;
//cn++;
}
}
}
for(int k = 0; k < m; ++k){
System.out.println(res[k]);
}
}
}
利用哈希表
import java.util.*;
public class Main {
//static int[] data = new int[100005];
public static void main(String[] args) {
Map<Integer,Integer> p = new HashMap<Integer,Integer>();
Scanner in = new Scanner(System.in);
//位置个数
int n = in.nextInt();
in.nextLine();
//各个通道的瓶子数
for(int i = 0; i < n; ++i) {
p.put(in.nextInt(), i+1);
//data[i] = in.nextInt();
}
//发球次数
int m = in.nextInt();
int[] res = new int[m];
int cn = 0;
for(int j = 0; j < m; ++j){
int target = in.nextInt();
if(p.containsKey(target) == true){
res[cn] = p.get(target);
}
else {
res[cn] = 0;
}
cn++;
}
for(int k = 0; k < m; ++k){
System.out.println(res[k]);
}
}
}
结果哈希表还没AC……90%……