[E模拟] lc2670. 找出不同元素数目差数组(哈希表+状态压缩)

文章目录

    • 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;
    }
};

你可能感兴趣的:(LeetCode,散列表,哈希算法,数据结构)