
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums)
{
vector<int> ans;
int count = 0;
for(int i=0; i<nums.size(); ++i)
{
for(int j=0; j<nums.size(); ++j)
{
if(nums[i] > nums[j])
{
count++;
}
}
ans.push_back(count);
count = 0;
}
return ans;
}
};
可以看出暴力法的执行确实慢

class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums)
{
int n = nums.size();
vector<pair<int,int> > tmp;
tmp.clear();
vector<int> vec(n, 0);
for (int i = 0;i < n; ++i)
{
tmp.push_back(make_pair(nums[i], i));
}
sort(tmp.begin(), tmp.end());
int pre = -1;
for (int i = 0;i < n; ++i)
{
if (i == 0)
{
vec[tmp[i].second] = pre + 1;
}
else if (tmp[i].first == tmp[i-1].first)
{
vec[tmp[i].second] = pre + 1;
}
else
{
pre = i - 1;
vec[tmp[i].second] = pre + 1;
}
}
return vec;
}
};
这篇博客探讨了两种解决数组中每个元素小于其右侧元素数量的方法。第一种方法是暴力法,通过双重循环计算,效率低下。第二种方法采用排序,将数组元素与索引关联,然后通过一次遍历计算所需信息,显著提高了效率。
2665

被折叠的 条评论
为什么被折叠?



