如何优化未排序数组的搜索?

时间:2019-03-07 08:13:22

标签: c++ optimization

s

这是我正在解决的一个简单问题。它是一个程序,用于检查数组中特定整数的出现次数。数组未排序。

测试应用程序正在向程序提供大小为10000041的输入数组,其中包含100000个查询,并希望在0.1秒内完成执行。

对于上下文,程序需要0.106354秒才能在测试应用程序上以数组大小10000和查询数量10000执行。

我知道SO社区不喜欢这些类型的问题,但是我搜索了我知道的所有资源,但找不到解决方法。

1 个答案:

答案 0 :(得分:4)

您需要预先计算每个数字的出现,可以使用map容器来实现:

ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

long long int n;
cin >> n;
int arr[n];
map <int, int> cnt;

for(int i = 0; i < n; i++){
    cin >> arr[i];
    cnt[arr[i]]++;
}
int q, b;
cin >> q;

for(int j = 0; j < q; j++)  //Number of Queries
{
    cin >> b;

    int count = cnt[b];

    if(count  == 0)
        cout << "NOT PRESENT" << "\n";
    else
        cout << count << "\n";
}

要进一步优化,您可以使用@Mayur评论中提到的unordered_map容器。