文章目录
- 1. 题目来源
- 2. 题目解析
1. 题目来源
链接:2670. 找出不同元素数目差数组
2. 题目解析
哈希计数统计就行了,题解里有看到用 long 64 位进行状态压缩的,可以参考下。这类题就不纠结写法了。
思路:
- 两个哈希表,一个统计前缀、一个统计后缀。哈希表的 size 就是不同元素的个数。
- 先统计后缀,元素依次入哈希表。再顺序遍历,维护前缀哈希表,size 差值就是答案。注意后缀哈希表元素个数为 0 时,需要 erase 掉
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
class Solution {
public:vector<int> distinctDifferenceArray(vector<int>& nums) {int n = nums.size();unordered_map<int, int> l, r;for (int i = n - 1; ~i; i -- ) r[nums[i]] ++ ;vector<int> res(n);for (int i = 0; i < n; i ++ ) {l[nums[i]] ++ ;r[nums[i]] -- ;if (r[nums[i]] == 0) r.erase(nums[i]);res[i] = l.size() - r.size();}return res;}
};