滑动窗口

一维滑动窗口(SlidingWindow)-javaleetcode算法

天涯浪子 提交于 2019-12-13 21:19:26
一维滑动窗口(SlidingWindow) 滑动窗口(Sliding Window)问题经常使用快慢指针(slow, fast pointer) [0, slow) 的区域为滑动窗口已经探索过的区域 [slow, fast]的区域为滑动窗口正在探索的区域 (fast, end of array)为待探索的区域 Sliding Window的问题主要分为: fixed size sliding window 和 dynamic size sliding window fixed size sliding window: 当快指针增加的时候慢指针必须增加 non-fixed size sliding window: 快指针增加,慢指针不一定变化 使用滑动窗口可以线性时间解决问题而且可以减少空间消耗 Fixed Length Sliding Window: 1.Strstr : Return the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. Input: haystack = "hello", needle = "ll" Output: 2 要求找到短字符串在的起始位置在长字符串中的位置 所以只需要保持一个fixed sliding

剑指offer---滑动窗口的最大值

半城伤御伤魂 提交于 2019-12-10 18:31:19
吐槽 这道题真的把我秀成麻瓜,题解都看不懂,智商感到了碾压,还是基础不够扎实,对一些数据结构的理解还不够深刻 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。 思路 用双端队列来存储数组元素的索引 如果新来的值比队列尾部的数小,那就追加到后面,因为它可能在前面的最大值划出窗口后成为最大值 如果新来的值比尾部的大,那就删掉尾部,再追加到后面 如果追加的值比的索引跟队列头部的值的索引超过窗口大小,那就删掉头部的值 每次队列的头都是滑动窗口中值最大的 代码 import java . util . * ; public class leetcode_64 { public static void main ( String [ ] args ) { } public class TreeNode { int

leetcode滑动窗口题集

╄→尐↘猪︶ㄣ 提交于 2019-12-10 14:28:48
滑动窗口是一类题目,虽然其中有的题目可以有其他的或者更简单的解法,但是作为一个通用解法,我们在有限的时间里还是可以用的,具体在leetcode中有几题,有人已经总结了,而且说的很好 leetcode滑动窗口解决 我这几题都是用java来写的,在用java写的过程中呢,遇到一些问题,比如非常容易忽视的问题,Integer类型的,要用equals方法比较大小,否则当数值大于127的时候会出错。 以最小覆盖字串为例,模板中必有的成分是left,right,needs,windows,match,另外注意两个while循环,一个right++,left++; 注意match-- 处的注解 public String minWindow(String s, String t) { String result =""; int left = 0; int right = 0; int minLength = Integer.MAX_VALUE; int resultLeft= 0; int resultRight = 0; int match = 0; HashMap<Character,Integer>needs = new HashMap<>(); HashMap<Character,Integer>windows = new HashMap<>(); for(int i=0;i<t

力扣练习——无重复字符的最长子串

怎甘沉沦 提交于 2019-12-09 15:45:29
力扣练习——无重复字符的最长子串 问题描述 思路和提示 个人思路 官方题解 方法一:暴力法 方法二:滑动窗口 代码及结果 代码 结果 滑动窗口代码 1.直观的滑动窗口法 2.滑动窗口优化 ( 双指针法 ) 3.滑动窗口优化(使用Hash) 总结 一些概念 1.python中二进制十进制转变 2.python中 ==^== 的功能 3.hash map 问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路和提示 个人思路 这个问题很自然的想到的列表的方法

Spark-Streaming之window滑动窗口应用

心不动则不痛 提交于 2019-12-08 08:12:26
Spark-Streaming之window滑动窗口应用,Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据,会被聚合起来执行计算操作,然后生成的RDD,会作为window DStream的一个RDD。 网官图中所示,就是对每三秒钟的数据执行一次滑动窗口计算,这3秒内的3个RDD会被聚合起来进行处理,然后过了两秒钟,又会对最近三秒内的数据执行滑动窗口计算。所以每个滑动窗口操作,都必须指定两个参数,窗口长度以及滑动间隔,而且这两个参数值都必须是batch间隔的整数倍。 Spark Streaming对滑动窗口的支持,是比Storm更加完善和强大的。 Spark-Streaming对滑动窗口支持的转换操作: 热点搜索词滑动统计,每隔10秒钟,统计最近60秒钟的搜索词的搜索频次,并打印出排名最靠前的3个搜索词以及出现次数 scala版本: [java] view plain copy package com.spark.streaming import org.apache.spark.streaming.Seconds import org.apache.spark.streaming.StreamingContext import org.apache.spark.SparkConf /** *

TCP滑动窗口详解

女生的网名这么多〃 提交于 2019-12-06 03:01:35
TCP滑动窗口详解 每个TCP活动连接的两端都维护一个 发送窗口结构 和 接收窗口结构 。如下图展示了一个TCP发送窗口结构。 图1 TCP发送端滑动窗口结构记录了已确认,在传以及还未传的数据的序列号。提供窗口的大小是接收端返回的ACK中窗口大小字段控制的。 TCP是以字节为单位维护其窗口结构的,如上图的标号1-13分别表示第1-13的字节。接收端返回的窗口里面的窗口称为 提供窗口 。 图2 这是通过 tcpdump 命令看到的信息,其中的win就是窗口大小。可以看到这里的窗口大小是6379。 滑动窗口到底怎么滑呢? 所以滑动窗口到底怎么滑呢?下面来具体分析一下: 现在我们假设tcp发送端发送了一个像图1一样的报文(字节1-13)至服务端。对应的tcp信息应该是这样,其他信息我们暂时不关注: send -> rcv seq 1:6 ,win 6 ···else··· 但接收端当前只能确认前三个字节(ACK=3),并通告了一个6字节大小的窗口,那么返回的tcp信息应该是这样。 rcv->send ack 3, win 6 ···else··· 大概是这个样子的: TCP接收端滑动窗口结构帮助了解其下次应接受的数据序列号,若接收到的数据序列号在窗口内,则可以存储,否则丢弃。 这时候,发送端可以计算其可用窗口,即它可以立即发送的数据,可用窗口计算值为提供窗口大小减去在传

滑动窗口 | 求最长连续子数组

て烟熏妆下的殇ゞ 提交于 2019-12-05 19:09:17
题目: 给定一个数组 {3, 1, 2, 1} 和一个数字k =4。求这个数组的一个最长连续子数组,这个最长连续子数组中所有数字的和必须小于或等于k。 例如,上面这个例子中,连续子数组有这么多种情况: {3}, {1}, {2}, {1}, {3, 1}, {1, 2}, {2, 1}, {3, 1, 2}, {1, 2, 1}, {3, 1, 2, 1}。 其中符合条件的就只有{1, 2, 1}。 代码: 代码分析的数据跟题目不一样但是换汤不换药(╯▽╰ ) #include <iostream> #include<stdio.h> using namespace std; int main() { int arr[9] = { 1,1,1,9,9,1,1,1,1 };//存放基础数据 int k = 4;//目标 int sum[9]={}; int len[9]={}; //滑窗长度 int loclen = 0; //记录当前滑窗长度 int locsum = 0; //记录当前滑窗求和 int startindex = 0; //记录滑窗起始位置 for (int i = 0;i < 9;i++) { locsum = locsum + arr[i]; if (locsum > k) { locsum = locsum - arr[startindex];

Flink SQL Window源码全解析

混江龙づ霸主 提交于 2019-12-05 17:54:23
文章目录 一、概述 二、Window分类 1、TimeWindow与CountWindow 2、TimeWindow子类型 Tumble Window(翻转窗口) Hop Window(滑动窗口) Session Window(会话窗口) 三、Window分类及整体流程 四、创建WindowOperator算子 五、WindowOperator处理数据图解 六、WindowOperator源码调试 1、StreamExecGroupWindowAggregate#createWindowOperator()创建算子 2、WindowOperator#processElement()处理数据,注册Timer 3、Timer触发 InternalTimerServiceImpl#advanceWatermark() WindwOperator#onEventTime() emitWindowResult()提交结果 七、Emit(Trigger)触发器 1、Emit策略 2、用途 3、语法 4、示例 5、Trigger类和结构关系 概述 窗口是无限流上一种核心机制,可以流分割为有限大小的“窗口”,同时,在窗口内进行聚合,从而把源源不断产生的数据根据不同的条件划分成一段一段有边界的数据区间,使用户能够利用窗口功能实现很多复杂的统计分析需求。 本文内容: Flink SQL

TCP学习笔记

对着背影说爱祢 提交于 2019-12-04 11:52:25
目录 rwnd 接收端窗口 滑动窗口 cwnd 发送端窗口 拥塞窗口 参考 rwnd 接收端窗口 滑动窗口 滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的 cwnd 发送端窗口 拥塞窗口 来源: https://www.cnblogs.com/CSunShine/p/11861386.html

堆的相关题目—滑动窗口

泪湿孤枕 提交于 2019-12-04 04:46:48
1、数据流滑动窗口平均值 描述 给出一串整数流和窗口大小,计算滑动窗口中所有整数的平均值。 样例 样例1 : MovingAverage m = new MovingAverage(3); m.next(1) = 1 // 返回 1.00000 m.next(10) = (1 + 10) / 2 // 返回 5.50000 m.next(3) = (1 + 10 + 3) / 3 // 返回 4.66667 m.next(5) = (10 + 3 + 5) / 3 // 返回 6.00000来源:https://www.lintcode.com/problem/moving-average-from-data-stream/description from collections import deque class MovingAverage: def __init__(self, size): self.queue = deque() self.size = size self.sum = 0.0 def next(self, val): if self.size == len( self.queue): temp = self.queue.popleft() self.sum -= temp self.queue.append(val) self.sum += val