2023.9.2
本题直观的解法就是双层for循环暴力求解:
暴力解:
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> ans;
for(int i=0; i<nums.size(); i++)
{
int temp = 0;//比当前元素小的元素个数
for(int j=0; j<nums.size(); j++)
{
if(nums[j] < nums[i]) temp++;
}
ans.push_back(temp);
}
return ans;
}
};
上述解法中,元素之间进行了重复比较,可以进行优化:文章来源:https://www.toymoban.com/news/detail-691822.html
暴力解(优化版):
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> ans(nums.size());
for(int i=0; i<nums.size(); i++)
{
for(int j=i+1; j<nums.size(); j++)
{
if(nums[j] < nums[i]) ans[i]++;
else if(nums[j] > nums[i]) ans[j]++;
}
}
return ans;
}
};
由于题中nums[i]给的范围是0~100,因此还可以以空间换时间,进一步优化:文章来源地址https://www.toymoban.com/news/detail-691822.html
哈希法:
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> v(nums.begin(),nums.end());
sort(v.begin(),v.end()); //排序之后,元素下标就是小于当前元素的个数
int hash[101];
for(int i=0; i<v.size(); i++)
{
if(i>0 && v[i]==v[i-1]) continue;
hash[v[i]] = i;
}
for(int i=0; i<nums.size(); i++)
{
nums[i] = hash[nums[i]];
}
return nums;
}
};
到了这里,关于leetcode 1365. 有多少小于当前数字的数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!