给出向量中有多少个小于自身的数字

Posted

技术标签:

【中文标题】给出向量中有多少个小于自身的数字【英文标题】:give how many numbers in a vector that are less than itself 【发布时间】:2020-09-20 09:19:39 【问题描述】:

我必须找出有多少其他数字小于 nums[i] 并将它们返回到另一个向量中,例如 [6,5,4,8] nums[0] = 6 所以有两个数字小于 6 . 所以 2 将被推到另一个向量。在检查最后一个元素时我没有得到 3

class Solution 
public:
    vector<int> smallerNumbersThanCurrent(vector<int>& nums) 
        vector<int> nums2;
        for(int i =0; i< nums.size(); ++i)
            int max = nums[i];
            int count = 0;
            for(int j =0; j < nums.size(); ++j)
                if(nums[j] < max && j!=0) 
                    count++;
                else 
                    continue;
            
            nums2.push_back(count);
        
        return nums2;
    
;

【问题讨论】:

为什么通过&amp;&amp; j!=0排除第一个元素? 哇问题描述说包括这个我把它取下来了,谢谢 【参考方案1】:

在条件中计数时排除第一个元素:

if(nums[j] < max && j!=0) 
               // ^^  ---- remove this

您确实需要一些算法。 std::transform 将一个值范围转换为另一个值,count_if 计算谓词在给定范围内返回 true 的频率:

#include <vector>
#include <iostream>
#include <algorithm>

std::vector<size_t> count_if_smaller(const std::vector<int>& v) 
    std::vector<size_t> result(v.size());
    std::transform(v.begin(),v.end(),result.begin(),
                [&](int x)
                    return std::count_if(v.begin(),v.end(),[&](int y)
                        return y < x;
                    );
                 );
    return result;


int main() 
    std::vector<int> v6,5,4,8;
    auto r = count_if_smaller(v);
    for (auto e : r) std::cout << e << " ";

使用算法的一个优点是您不必担心单个元素的索引。在上面的代码中引入与您的代码相同的错误会更加困难。换句话说,使用算法不太容易出错。尽可能考虑使用它们。

PS:您当前的方法很复杂O(N^2)。如果您对输入向量进行排序,您可以轻松获得O(N log N)

【讨论】:

以上是关于给出向量中有多少个小于自身的数字的主要内容,如果未能解决你的问题,请参考以下文章

将数字向量转换为标准单位向量的函数

PAT 乙级 1019

几个概念

如何创建一个给定正整数的函数,返回一个向量,该向量的数字是 5 的倍数?

OpenCV中convexHull函数的输出向量是多少?

相对于使用堆,使用带有 insert() 的向量作为优先级队列的开销是多少? (c++)