LeetCode每日一题 | 2670. 找出不同元素数目差数组

文章目录

    • 题目描述
    • 问题分析
    • 程序代码

题目描述

原题链接

给你一个下标从0开始的数组nums,数组长度为n

nums的 不同元素数目差 数组可以用一个长度为n的数组diff表示,其中diff[i]等于前缀nums[0, ..., i]中不同元素的数目 减去 后缀nums[i + 1, ..., n - 1]中不同元素的数目。

返回nums的 不同元素数目差 数组。

注意nums[i, ..., j]表示nums的一个从下标i开始到下标j结束的子数组(包含下标ij 对应元素)。特别需要说明的是,如果i > j,则nums[i, ..., j]表示一个空子数组。

问题分析

可以先进行一次遍历,用哈希表存储数组中每个元素的个数。

然后第二遍遍历计算前缀和后缀只差。具体计算过程如下:

  1. 指针移动
  2. 哈希表中减去当前元素,若当前元素个数为0,则后缀不同元素个数减1
  3. 将当前元素加入一个集合set,集合元素个数即为前缀不同元素个数
  4. 计算前后缀元素个数之差,加入结果集

程序代码

class Solution {
public:
    vector<int> distinctDifferenceArray(vector<int>& nums) {
        int n = nums.size();
        unordered_map<int, int> mp;
        for(auto num : nums) {
            mp[num]++;
        }
        unordered_set<int> st;
        vector<int> res;
        int t = mp.size();
        for(auto num : nums) {
            mp[num]--;
            if(mp[num] == 0)  t--;
            st.insert(num);  
            res.push_back(st.size() - t);
        }
        return res;
    }
};

你可能感兴趣的:(leetcode题解,leetcode,算法,数据结构)