给定一个整数数组 (下标由 0 到 n-1,其中 n 表示数组的规模,数值范围由 0 到 10000),以及一个 查询列表。对于每一个查询,将会给你一个整数,请你返回该数组中小于给定整数的元素的数量。
在做此题前,最好先完成 线段树的构造 and 线段树查询 II 这两道题目。
样例
样例 1:
输入: array =[1,2,7,8,5] queries =[1,8,5]
输出:[0,4,2]
样例 2:
输入: array =[3,4,5,8] queries =[2,4]
输出:[0,1]
挑战
可否用一下三种方法完成以上题目。
仅用循环方法
分类搜索 和 二进制搜索
构建 线段树 和 搜索
vector<int> countOfSmallerNumber(vector<int> &A, vector<int> &queries) {
// write your code here
if (A.empty())
{
return vector<int>(queries.size(), 0);
}
sort(A.begin(), A.end());
std::vector<int>hashVec(A[A.size() - 1] + 1, 0);
for (int i = 0; i<A.size(); i++)
{
hashVec[A[i]]++;
}
std::vector<int>ret(queries.size(),0);
int num = 0;
for (int i = 0; i<queries.size(); i++)
{
if (queries[i] > hashVec.size())
{
ret[i] = num;
continue;
}
num = 0;
for (int j = 0; j<queries[i]; j++)
{
if (hashVec[j]>0)
{
num += hashVec[j];
}
}
ret[i] = num;
}
return ret;
}