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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-31 13:08:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-31 13:08:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-31 13:08:02       82 阅读
  4. Python语言-面向对象

    2024-01-31 13:08:02       91 阅读

热门阅读

  1. 《Docker极简教程》--前言--本书的目的和目标

    2024-01-31 13:08:02       62 阅读
  2. 一次Rust重写基础软件的实践(三)

    2024-01-31 13:08:02       45 阅读
  3. SpringBoot实现动态数据源配置

    2024-01-31 13:08:02       52 阅读
  4. 1.29C语言 sscanf函数的用法 abs整数绝对值函数

    2024-01-31 13:08:02       55 阅读
  5. 数据结构-并查集

    2024-01-31 13:08:02       55 阅读
  6. vant滚动条下滑与下拉刷新冲突

    2024-01-31 13:08:02       54 阅读
  7. React 基础学习02

    2024-01-31 13:08:02       51 阅读
  8. 2024/1/30 备战蓝桥杯 3-1 栈

    2024-01-31 13:08:02       56 阅读
  9. arch linux上安装docker

    2024-01-31 13:08:02       57 阅读
  10. docker 的常用命令

    2024-01-31 13:08:02       51 阅读
  11. Reactor简述

    2024-01-31 13:08:02       49 阅读