文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个整数数组 nums与一个整数 k,请你构造一个长度 n-k+1 的数组 ans,这个数组第i个元素 ans[i] 是每个长度为k的子数组 nums[i:i+k-1] = [nums[i], nums[i+1], ..., nums[i+k-1]]数字的种类数

返回这个数组 ans。

示例 1:
输入: nums = [1,2,3,2,2,1,3], k = 3
输出: [3,2,2,2,3]
解释:每个子数组的数字种类计算方法如下:
- nums[0:2] = [1,2,3] 有'1','2','3'三种数字所以      ans[0] = 3
- nums[1:3] = [2,3,2] 有'2','3'两种数字所以          ans[1] = 2
- nums[2:4] = [3,2,2] 有'2','3'两种数字所以          ans[2] = 2
- nums[3:5] = [2,2,1] 有'1','2'两种数字所以          ans[3] = 2
- nums[4:6] = [2,1,3] 有'1','2','3'三种数字所以      ans[4] = 3示例 2:
输入: nums = [1,1,1,1,2,3,4], k = 4
输出: [1,2,3,4]
解释: 每个子数组的数字种类计算方法如下:
- nums[0:3] = [1,1,1,1] 只有'1'这一种数字所以         ans[0] = 1
- nums[1:4] = [1,1,1,2] 有'1','2'两种数字所以         ans[1] = 2
- nums[2:5] = [1,1,2,3] 有'1','2','3'三种数字所以     ans[2] = 3
- nums[3:6] = [1,2,3,4] 有'1','2','3','4'四种数字所以 ans[3] = 4提示:
1 <= k <= nums.length <= 10^5
1 <= nums[i] <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/distinct-numbers-in-each-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 滑动窗口
class Solution {public:vector<int> distinctNumbers(vector<int>& nums, int k) {int n = nums.size();vector<int> ans(n-k+1);unordered_map<int,int> m;for(int i = 0; i < k; ++i){m[nums[i]]++;}ans[0] = m.size();for(int i = k; i < n; ++i){if(--m[nums[i-k]] == 0)m.erase(nums[i-k]);++m[nums[i]];ans[i-k+1] = m.size();}return ans;}
};

376 ms 134.9 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1852. 每个子数组的数字种类数(滑窗)相关推荐

  1. 【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)

    文章目录 题目描述 思路 & 代码 题目描述 比 leetcode 136要难点 注意:空间复杂度要求O(1),否则用哈希表直接秒杀啦. 昨天的笔试,还有刷的面经都有这道题...今天赶紧补补 ...

  2. 【LeetCode】剑指 Offer 56. 数组中数字出现的次数

    [LeetCode]剑指 Offer 56. 数组中数字出现的次数 文章目录 [LeetCode]剑指 Offer 56. 数组中数字出现的次数 package offer;import java.u ...

  3. leetcode 11:旋转数组的最小数字

    leetcode 11:旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按 ...

  4. 【前端js】实现剑指offer|leetcode(二)——数组题目集合

    文章目录 一.数组去重 1. 对排序数组去重(leetcode 26. 删除排序数组中的重复项) 2. 检查是否存在重复元素(leetcode 217. 存在重复元素) 3. 检查相邻k个元素是否存在 ...

  5. Leetcode1712. 将数组分成三个子数组的方案数[C++题解]:双指针和前缀和

    文章目录 本题分析 题目链接 本题分析 题目重述: 给定一个非负的数组,要求将其分成3个非空的三段,要求每一段的数字之和依次递增(可以相等),求总共有几种分法. 题目解答: 双指针算法 思路:枚举第二 ...

  6. javascript中数组的22种方法

    前面的话数组总共有22种方法,本文将其分为对象继承方法.数组转换方法.栈和队列方法.数组排序方法.数组拼接方法.创建子数组方法.数组删改方法.数组位置方法.数组归并方法和数组迭代方法共10类来进行详细 ...

  7. 每日一道 LeetCode (42):旋转数组

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  8. 算法导论Java实现-随机化数组的两种方式(5.3章节)

    package lhz.algorithm.chapter.five; /** * 随机数组两种实现,<算法导论>第五章第三节 * 本文地址:http://mushiqianmeng.bl ...

  9. 需要排序的最短子数组的长度——是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组...

    需要排序的最短子数组的长度 貌似在leetcode上遇到过,就是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组. from:https://blog.csdn.net/behboyh ...

最新文章

  1. mysql库可以无限创建吗_mysql 创建库
  2. mysql导出数据库数据及表结构
  3. UVa 1607 (二分) Gates
  4. Android2.3.7源码结构分析
  5. 每天一道LeetCode-----计算二叉树所有根节点到叶子节点的和
  6. 不需要密码的windows计划任务设置
  7. 网关 Spring Cloud Gateway
  8. 远控免杀专题9 --- Avet免杀
  9. 你以为工厂模式很简单,可能是因为你懂的只是冰山的一角
  10. Spring Boot 发送邮件
  11. zabbix自动发现redis端口并监控redis性能
  12. 初探线程之线程竞争及故障
  13. eclipse换炫酷主题
  14. 冰点下载器的使用方法
  15. [SDOI2016]征途
  16. 微信小程序 flex:1表示什么
  17. 频率分析法破译密码和破译原理
  18. ytb网站报错 “您没有联网,请检查网络连接”
  19. Java实现内网穿透
  20. 关于对信号归一化后的频谱“消失”问题

热门文章

  1. unity消息队列判断字符串相等有错误_Python3十大经典错误及解决办法
  2. php汽车找车位,遭遇到车多车位少 教你如何快速找到停车位
  3. css标签resolution,html/css to fit all screen resolution
  4. python 重载的实现(single-dispatch generic function)
  5. swift 打包sdk_在封装SDK中Swift和OC混编之相互调用
  6. QT - 内存泄漏检测
  7. Bootstrap实现弹出框和提示框效果代码
  8. 实用crontab命令
  9. Java 网络编程(二) 两类传输协议:TCP UDP
  10. [转]详细介绍如何做关联