題意:找到數(shù)組中第x個y的下標
分析:這題有很多做法膏燕,下面給出一種效率比較高的方法,即用map與vector創(chuàng)建一個二維都不定長且一維不定索引的二維數(shù)組悟民,這樣做方便查找但不方便進行迭代遍歷
map<int , vector<int> >a;
if(!a.count(x)) a[x] = vector<int>(); // 如果x未出現(xiàn)過煌寇,則創(chuàng)建一個以x為第一維索引的不定長數(shù)組,即要查找的數(shù)為第一維逾雄,第幾個為第二維
if(!a.count(y)||a[y].size()<x) printf("0\n");//第一維沒有索引y或者沒有x個y
a[x].push_back(i+1); // 不定長數(shù)組中儲存著下標
printf("%d\n", a[y][x-1]);
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
map<int , vector<int> >a;// > > 要用空格分開
int main(){
int n,m, x,y;
while(scanf("%d %d", &n, &m) == 2){
a.clear();
for(int i = 0; i < n; i++){
scanf("%d", &x);
if(!a.count(x)) a[x] = vector<int>(); // 如果x未出現(xiàn)過阀溶,則創(chuàng)建一個以x為第一維索引的不定長數(shù)組,即要查找的數(shù)為第一維鸦泳,第幾個為第二維
a[x].push_back(i+1); // 不定長數(shù)組中儲存著下標
}
while(m--){
scanf("%d%d", &x,&y);
if(!a.count(y)||a[y].size()<x) printf("0\n");//第一維沒有索引y或者沒有x個y
else printf("%d\n", a[y][x-1]);
}
}
return 0;
}