248 · 统计比给定整数小的数的个数

 

给定一个整数数组 (下标由 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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值