一、题目
1、题目描述
给你一个下标从 0 开始的数组
nums
,数组长度为n
。
nums
的 不同元素数目差 数组可以用一个长度为n
的数组diff
表示,其中diff[i]
等于前缀nums[0, ..., i]
中不同元素的数目 减去 后缀nums[i + 1, ..., n - 1]
中不同元素的数目。返回
nums
的 不同元素数目差 数组。注意
nums[i, ..., j]
表示nums
的一个从下标i
开始到下标j
结束的子数组(包含下标i
和j
对应元素)。特别需要说明的是,如果i > j
,则nums[i, ..., j]
表示一个空子数组。
2、接口描述
class Solution {
public:
vector<int> distinctDifferenceArray(vector<int>& nums) {
}
};
3、原题链接
二、解题报告
1、思路分析
正序遍历一次,累计前缀,逆序遍历一次,减去后缀
2、复杂度
时间复杂度: O(n) 空间复杂度:O(n)
3、代码详解
class Solution {
public:
vector<int> distinctDifferenceArray(vector<int>& nums) {
vector<int> ret;
unordered_set<int> mp;
for(auto x : nums) mp.insert(x), ret.emplace_back(mp.size());
mp.clear();
for(int i = nums.size() - 1; i >= 0; i--) ret[i] -= mp.size(), mp.insert(nums[i]);
return ret;
}
};