C++ 给出一个向量中有多少个数字小于它本身
我必须找到有多少其他数字小于nums[i],然后在另一个向量中返回它们,例如[6,5,4,8]nums[0]=6,所以有两个数字小于6。所以2会被推到另一个向量。在检查最后一个元素时,我没有得到3C++ 给出一个向量中有多少个数字小于它本身,c++,vector,C++,Vector,我必须找到有多少其他数字小于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(in
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;
}
};
类解决方案{
公众:
矢量小数值当前值(矢量和nums){
矢量nums2;
对于(int i=0;i
在条件下计数时排除第一个元素:
if(nums[j] < max && j!=0)
// ^^ ---- remove this
使用算法的一个优点是,您不必担心单个元素的索引。在上面的例子中,在代码中引入相同的bug将更加困难。换句话说,使用算法不太容易出错。当你可以的时候考虑使用它们。< /P>
注:您当前的方法具有复杂性
O(N^2)
。如果对输入向量进行排序,则可以轻松获得O(N log N)
。在条件下计数时排除第一个元素:
if(nums[j] < max && j!=0)
// ^^ ---- remove this
使用算法的一个优点是,您不必担心单个元素的索引。在上面的例子中,在代码中引入相同的bug将更加困难。换句话说,使用算法不太容易出错。当你可以的时候考虑使用它们。< /P>
注:您当前的方法具有复杂性
O(N^2)
。如果对输入向量进行排序,可以很容易地得到O(N log N)
。为什么要通过&&j>将第一个元素排除在计数之外=0
?哇,问题描述说包含了这个,我把它取下来,它工作了,谢谢。你为什么通过和&j排除第一个元素的计数=0
?哇,问题描述说包含了这个,我把它取下来,它可以工作了,谢谢