题目
我的想法
第一又是暴力解。这个题是个很好想的暴力解。
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
int log[101] = {};
int temp;
for (int i = 0; i<nums.size(); i++) {
log[nums[i]]++;
}
for (int i = 0; i<nums.size(); i++) {
temp = 0;
for (int j = 0; j<nums[i]; j++) {
temp = temp + log[j];
}
nums[i] = temp;
}
return nums;
}
};
官方题解和我的思路大致相同。
反思
这里贴一个舍友的代码
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
vector<int> count(101,0);
vector<int> res;
int n=nums.size();
for(int i=0;i<n;i++) count[nums[i]]++;
for(int i=1;i<101;i++) count[i]+=count[i-1];
for(int i=0;i<n;i++) res.push_back(nums[i]==0?0:count[nums[i]-1]);
return res;
}
};
这组代码相当于对于我的代码进行了优化
- function有数据类型的声明,因此应尽量使用
vector
做返回值。 - 记录下
nums.size()
而不是算两遍。
我还是要逐渐慢慢学着vector,现阶段就遇到啥学啥就行了。
vector<int> count(101,0); //动态数组count 初始化为 101 个 0
res.push_back(count[nums[i]-1]); //向动态数组 res 中压数(count[nums[i]-1])