首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数组的度(滑动窗口)

题目 给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。...示例 1: 输入:[1, 2, 2, 3, 1] 输出:2 解释: 输入数组的度是2,因为元素1和2的出现频数最大,均为2....连续子数组里面拥有相同度的有如下所示: [1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2] 最短连续子数组...思路 用map把数组中出现的数个数记录下来,然后找到最大度和出现频数最大的那个数m,与原始数组度相同的子数组必然包含所有的m,那么如果要求最短的子数组就是求包含所有m的最短数组。...有个需要注意的地方就是m可以是多个,所以就要把每个m存到一个数组中然后把所有m对应的最短子数组的长度求出取最小 class Solution { public: int result(int m

30410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java双端队列给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。

    双端队列实现 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。...返回滑动窗口中的最大值。...输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 ----...5 1 3 -1 -3 [5 3 6] 7 6 1 3 -1 -3 5 [3 6 7] 7 思路 : 1 开一个双端队列 和一个结果数组...(存储结果最大值的) 2 只需要把双端队列第一个设置为最大值 3 每一次满足窗口大小就 返回第一个Nums[ 队列里面的第一个值] 4 刚开始的话是要满足 队列里面填充k 个 5 满了之后,随着窗口易懂

    1.2K10

    滑动窗口之乘积小于k的子数组

    乘积小于k的子数组 给定一个正整数数组 nums和整数 k 。 请找出该数组内乘积小于 k 的连续的子数组的个数。...先敲个黑板 下面一共有两种写法,第一种是按自己理解写的,是过了的,但是 感觉懂了但没完全懂。。。(意思是 我好像懂了滑动窗口 但是写的不规律不条理 好像没完全懂。。)...因为我们计算的是连续的子数组的个数,每次右指针移动、加入一个新的右边的数值的时候,在满足l到r的乘积小于k的前提下,总的ans的增加量就是新的值、新的值与之前所有可连续的值的组合,这个就用到一点点数学知识了...让我们来想一想,我们需要满足的条件是连续数组内的数乘积小于k,当右指针一直向右移动使得乘积不断增大时,总会有大于等于k的时候,那个时候,我们就需要改变l了,在这种情况下,我们计算的ans就不是现在的r-l...因为当l不变、r向右移动时,我们的乘积一直都是非递减的,如果当前右指针移动到的位置使得l到r不满足乘积小于k,那我们再继续移动右指针,乘积一定依旧不满足小于k,那就说明这个l我们已经“利用”完了,l可以退出滑动窗口了

    73610

    优先算法 —— 滑动窗口系列 - 长度最小的子数组

    前言 当我们发现暴力解法两个指针都不回退,都是向同一个方向移动的时候我们就可以使用滑动窗口 1. 长度最小的子数组 题目链接: 209....算法原理 解法1:暴力解法 暴力枚举出所有的子数组的和 时间复杂度为O(N^2) 定义三个值:left,right,sum 先固定左区间,右区间先不动...,再计算数组走了几步,后面的就没有必要继续计算了,因为题目要求的是最小长度的子数组 接下来我们再将left往后移动一位,然后我们的right是可以不需要移动的,因为我们上面已经知道[...3 ~ 2] 这个区间的值为多少,我们可以直接更新sum的值 解法2:同向双指针(滑动窗口) 由解法1我们可以看出:本题的两个指针但是同一个方向进行移动的,那么我们就可以利用单调性,...使用同向双指针(滑动窗口)来进行优化 如何使用滑动窗口: 1.

    13210

    《滑动窗口篇》---①长度最小的子数组(中等)

    滑动窗口推导过程 我们不能说一上来就知道这个题目用滑动窗口,然后就使用滑动窗口的方法来做这个题目。 首先我们想到的应该是暴力解法。 接着再优化为滑动窗口 由于数字都是 ≥ 0 的数。...right 还需要从新回到left的位置。再次计算累加和是否≥target。 而我们发现 (使用暴力解法的时候两个指针可以不会退。就可以用滑动窗口了) 此时只需要让sum-2 然后再次判断。...而right不用移动。 这就引入了滑动窗口。 利用单调性,+同向双指针。...滑动窗口的使用: 1. left = 0,right =0; 2.进窗口 3.判断 4.出窗口 方法一:暴力解法 class Solution { public int minSubArrayLen...0 : minLen; } } 复杂度分析 时间复杂度:O(n)。n是数组的长度。指针 left 和 right 最多各移动一次。 空间复杂度:O(1)。

    4900

    【优选算法】Sliding-Chakra:滑动窗口的算法流(上)

    本篇是优选算法之滑动窗口算法,该算法常用于求一个移动的区间 1.概念解析 什么是滑动窗口算法?...把一个较长的序列(比如数组、字符串等),划分成一个个固定长度或者动态长度的 “子序列”,这个子序列就被称作窗口 。...好比通过一个固定大小的窗框在一幅长画卷上逐步移动,每次窗框圈定的部分就是一个窗口内容,窗口会按照特定的规则在序列上 “滑动”,常见的是每次移动一个元素的位置,新元素进入窗口,同时最靠前的旧元素移出窗口,...,然后再从开始以此往复,所有的子数组和都枚举一遍显然十分冗余,时间复杂度为O(n²) 说明我们要减少不必要的子数组来优化,如果使用双指针那样异侧指针的话,从两侧缩小来找子集会漏掉一些情况,所以可以考虑同侧指针结合单调性来解决问题...),但实际上right和left分别往后遍历数组的时间复杂度为O(n+n) = O(2n) = O(n) 代码实现: #include #include using

    13510

    golang刷leetcode 滑动窗口(2)K 个不同整数的子数组

    给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。...(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。) 返回 A 中好子数组的数目。...示例 2: 输入:A = [1,2,1,3,4], K = 3 输出:3 解释:恰好由 3 个不同整数组成的子数组:[1,2,1,3], [2,1,3], [1,3,4]....提示: 1 <= A.length <= 20000 1 <= A[i] <= A.length 1 <= K <= A.length 解题思路: 1,这是一个滑动窗口类题目,设置左右指针start,end...2,窗口内部问题可以拆分出两个子问题 A,K种不同值组成的子数组 B,A所得子数组中,移动左指针仍然满足题目要求的子数组 3,定义两个左指针start,start2 A,移动start和end,直到k

    34110

    滑动窗口:长度最小子数组 和 无重复字符的最长字串

    前言 声明:题目来源于: 力扣 一、长度最小的子数组 题目链接:传送门 (1) 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。...如果不存在符合条件的子数组,返回 0 。...定义一个变量sum,用于记录当前窗口内所有变量的和。 窗口:这里是指left指针与right指针之间的范围。 右边界指针right向右移动,表示进窗口。...如果left+right窗口不满足条件,需要新元素加入。 左边界指针left向右移动,表示出窗口。...请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。 (2)解题思路 处理特殊情况: 当长度小于等于1时,返回这个字符串本身即可。

    16710

    长度最小的子数组(滑动窗口)

    我们可以使用两个指针当做数组的左右区间,用left,right指针指向数组的下标,left表示左区间,right表示右区间,用sum值计算每次移动区间之后区间元素值的和,最后遍历完返回最小区间数组。...————滑动窗口 解法二: 思路:   其实整体思路和上面差不多,不过滑动窗口的left和right都是在向右移动,right指针没有回退的操作,这种“同向双指针” ,也被称为滑动窗口,其实很形象,...左右指针一直同向移动,看起来就像是在滑动的窗口,故此得名。   ...我们可以看到,如果是最坏的情况,也就是左右指针把数组都遍历一遍,也就是O(2n)时间复杂度,也就是 O(N) 级别的时间复杂度,空间上只用了几个变量,所以 空间复杂度为O(1),相比较之下,我们的滑动窗口确实非常好用...0 : len; } };   今天是第一次写滑动窗口的题,果然非常奇妙,居然只有O(N)的时间复杂度,理解滑动窗口的本质才有助于你解决类似问题不会毫无思路。

    10810

    Sentinel-Go 源码系列(三)滑动时间窗口算法的工程实现

    滑动时间窗口的演进 通常来说,流控的度量是按每秒的请求数,也就是 QPS QPS:query per second,指每秒查询数,当然他的意义已经泛化了,不再特指查询,可以泛指所有请求。...[img4.png] 滑动时间窗口 为了解决上面的问题,工程师想出了一个好办法:别固定时间窗口,以当前时间往前推算窗口 [img5.png] 但问题又来了,这该怎么实现呢?...滑动时间窗口工程实现 在工程实现上,可以将时间划分为细小的采样窗口,缓存一段时间的采样窗口,这样每当请求来的时候,只需要往前拿一段时间的采样窗口,然后求和就能拿到总的请求数。...[img6.png] Sentinel-Go 滑动时间窗口的实现 前方代码高能预警~ Sentinel-Go 是基于 LeapArray 实现的滑动窗口,其数据结构如下 type LeapArray struct...最后 本节从滑动窗口流控算法的工程实现演进到 Sentinel-Go 里滑动窗口的实现,从 Sentinel-Go 的实现上看到,还得考虑内存的使用,并发控制等等,如果完全写出来,还是非常不容易的。

    68441

    K 个不同整数的子数组(双指针)(滑动窗口)

    题目 给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定独立的子数组为好子数组。...(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3。) 返回 A 中好子数组的数目。...示例 1: 输入:A = [1,2,1,2,3], K = 2 输出:7 解释:恰好由 2 个不同整数组成的子数组:[1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2...示例 2: 输入:A = [1,2,1,3,4], K = 3 输出:3 解释:恰好由 3 个不同整数组成的子数组:[1,2,1,3], [2,1,3], [1,3,4]....思路 把「恰好」改成「最多」就可以使用双指针一前一后交替向右的方法完成,这是因为 对于每一个确定的左边界,最多包含 KK 种不同整数的右边界是唯一确定的,并且在左边界向右移动的过程中,右边界或者在原来的地方

    36110

    移动端图片放大滑动查看-插件photoswipe的使用

    最近在开发项目的时候,遇到一个需求,需要移动端实现放大查看图片的功能,然后我就在网上搜索了一下资料,看到了photoswipe这个插件,后来试了试,确实挺好用的,它可以实现手势放大缩小查看图片,左右滑动切换图片以及上下滑动关闭大图...一、需要引入的css和js文件、   页面中需要引入如下文件:photoswipe.css,default-skin.css,photoswipe.js,photoswipe-ui-default.min.js...  首先可以到它的官网或者github网站上下载插件,就可以找到需要的资源,官网地址:http://photoswipe.com;GitHub网址:https://github.com/dimsemenov...apple-mobile-web-app-capable" content="yes"> photoswipe的使用...--如果有多个data-pswp-uid 它的值是不能重复的-->

    5.3K50
    领券