题目
思路
题目的意思还是查找相等的数字,然后返回在原数组中的下标,找不到就返回0。
由于数据量达到了五次方,所以要用O(nlogn)的优化,先对数组排序,利用哈希表来记录数字–下标,因为它查找的复杂度为O(1)。
AC代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, *bowl_sort, Q; //Q表示发球次数
unordered_map<int, int> m;
cin >> n;
bowl_sort = new int [n + 1];
for (int i = 1; i <= n; ++i) {
cin >> bowl_sort[i]; //无序
m[bowl_sort[i]] = i;//哈希表记录对应数字的下标
}
sort(bowl_sort + 1, bowl_sort + 1 + n);
cin >> Q;
while (Q--) {
int target, res = 0;
cin >> target;
int a = lower_bound(bowl_sort + 1, bowl_sort + 1 + n, target) - bowl_sort;
if (bowl_sort[a] == target) {
res = m[bowl_sort[a]];//查找复杂度为O(1)
}
cout << res << endl;
}
}