题目:给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。
以数组形式返回答案。
示例 :
输入:nums = [8,1,2,2,3]
输出:[4,0,1,1,3]
解释:
对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。
对于 nums[1]=1 不存在比它小的数字。
对于 nums[2]=2 存在一个比它小的数字:(1)。
对于 nums[3]=2 存在一个比它小的数字:(1)。
对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。
1.原创
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> old_nums(nums); //vector赋值
sort(nums.begin(), nums.end()); //排序
vector<int> res;
for (auto i:old_nums){
vector<int>::iterator it = find(nums.begin(),nums.end(),i);
int index=&*it-&nums[0];
res.push_back(index);
}
return res;
}
};
2.题解
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> ans;//记录每次遍历后的比当前数大的结果
for(int i=0;i<nums.size();i++){
int temp=0;//保存比当前数小的数的个数
int left=i-1;//当前数的左边的数
int right=i+1;//当前数的右边的数
//向左查找
while(left>=0){
//如果左边的数比当前数小,temp++
if(nums[i]>nums[left]) temp++;
//继续向左移动
left--;
}
//向右查找
while(right<nums.size()){
//如果右边的数比当前数小,temp++
if(nums[i]>nums[right]) temp++;
//继续向右移动
right++;
}
//把比当前数小的个数存入数组
ans.push_back(temp);
}
//返回最后的结果
return ans;
}
};
作者:solitary-scorpio
链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/solution/you-duo-shao-xiao-yu-dang-qian-shu-zi-de-shu-zi-10/