滑动窗口

滑动窗口最大值leetcode & nowcoder(python)

老子叫甜甜 提交于 2020-01-08 21:27:45
方法一:暴力 时间O(nk) 1 class Solution: 2 def maxInWindows(self, num, size): 3 # write code here 4 if len(num)*size == 0: 5 return [] 6 res=[] 7 for i in range(len(num)-size+1): 8 res.append(max(num[i:i+size])) 9 return res 方法二:双端队列 双端队列保存当前窗口的最大值 1 from collections import deque 2 class Solution: 3 def maxSlidingWindow(self, nums: 'List[int]', k: 'int') -> 'List[int]': 4 # base cases 5 n = len(nums) 6 if n * k == 0: 7 return [] 8 if k == 1: 9 return nums 10 11 def clean_deque(i): 12 # remove indexes of elements not from sliding window 13 if deq and deq[0] == i - k: 14 deq.popleft() 15 16 # remove

11- tcp三次握手-并发

笑着哭i 提交于 2020-01-06 21:57:26
1. tcp三次握手 1.2 三次握手的过程 tcp协议是面向连接的、安全的流式传输协议; 在数据传输前,必须保证通信双方建立起了连接; 握手是协议的行为,在connect()时进行,无需编程实现; 标志位含义 (1)SYN: 请求建立连接 (2)ACK: 同意 (3)FIN: 断开连接的请求 1.2 tcp协议中的序号 第一次握手: (1)客户端将SYN置1,发出连接请求; (2)客户端随机生成一个32bit的序号seq/Seq; (3)这个序号后可以携带数据。 第二次握手: (1)服务器同意请求ACK置1; (2)服务器回发一个确认序号: ack/Ack=客户端随机序号+数据长度+SYN标志位; (3)服务器发出连接请求:SYN置1; (4)服务器会生成一个随机序号: seq=k; 第三次握手: (1)客户端同意请求ACK置1; (2)客户端回发一个确认序号: ack/Ack=服务器随机序号+数据长度+SYN标志位; 2. 滑动窗口 滑动窗口是TCP中用于实现如 ACK 确认、流量控制、拥塞控制的承载结构。可以理解为一块缓存。 通信的双方都有滑动窗口; (1)服务器:发送数据的窗口,接收数据的窗口; (2)客户端:发送数据的窗口,接收数据的窗口; 滑动窗口的内存是在变化的:其空间大小固定,但可存储的数据量在变化;其取决于通信对方可以接收的数据量。 使用流程 (1) mss:

python 构建滑动窗口读取图像

混江龙づ霸主 提交于 2019-12-28 14:21:26
import cv2 import os import numpy as np img = cv2.imread('E:\Temp\H51G004017_1.tif_1.tif', flags=-1) def sliding(image, step_size, windows_size): for y in range(0,image.shape[0],step_size): for x in range(0,image.shape[1],step_size): yield(x,y,image[y:y+windows_size,x:x+windows_size]) img1 = sliding(img, 128,128) im = next(img1) im2 = im[2] print(im2.shape) 来源: CSDN 作者: sddpltwanqiu 链接: https://blog.csdn.net/sddpltwanqiu/article/details/103742708

LeetCode_239滑动窗口最大值

孤街醉人 提交于 2019-12-27 17:08:34
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sliding-window-maximum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 class Solution { public int [ ] maxSlidingWindow ( int [ ] nums , int k ) { if ( nums == null || nums . length < 2 ) { return nums ; } if ( k == nums . length ) { int rs = nums [ 0 ] ; for ( int i = 1 ; i < nums . length ; i ++ ) { rs = Math . max ( rs , nums [ i ] ) ; } return new int [ ] { rs } ; } int len = nums . length ; int [ ] res = new int [ len - k + 1 ] ; int index = 0 ; int left =

AcWing 154. 滑动窗口 单调队列

瘦欲@ 提交于 2019-12-25 20:20:12
地址 https://www.acwing.com/problem/content/description/156/ 输入格式 输入包含两行。 第一行包含两个整数n和k,分别代表数组长度和滑动窗口的长度。 第二行有n个整数,代表数组的具体数值。 同行数据之间用空格隔开。 输出格式 输出包含两个。 第一行输出,从左至右,每个位置滑动窗口中的最小值。 第二行输出,从左至右,每个位置滑动窗口中的最大值。 输入样例: 8 3 1 3 -1 -3 5 3 6 7 输出样例: -1 -3 -3 -3 3 3 3 3 5 5 6 7 算法1 单调队列 求最大值和最小值的过程其实是一样的 就是求极值的过程 以求最小值为例 我们使用一个队列来进行记录 处于滑动窗口的m个数字 以插入的数据的角度来看 如果插入的数据比之前的m-1个数字都小 那么它就将清空之前的m-1个数字成为队首 如果插入的数据比之前m-1个数字中的某一个数字较大 那么它在该数字退出队列后 还是有可能成为最小数值的,也需要保留该插入数字,只不过插入的数字不是队首(以后有可能成为队首) 这个队里有三个性质 1 队首是最小数(以求最小值为例) 2 队列中队首和队尾数字的索引差值最大为m,也就是控制数值在滑动窗口范围内 3 队列中前部的数字如果比后面的数字大,那么在m个的滑动窗口中,它是不可能成为最小值(队首)的,需要排除出队列

TCP滑动窗口

橙三吉。 提交于 2019-12-17 10:50:53
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。 一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。 所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”;2. “滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。在引入一个例子来说这个协议之前,我觉得很有必要先了解以下前提: -1. TCP协议的两端分别为发送者A和接收者B,由于是全双工协议,因此A和B应该分别维护着一个独立的发送缓冲区和接收缓冲区,由于对等性(A发B收和B发A收),我们以A发送B接收的情况作为例子; -2. 发送窗口是发送缓存中的一部分,是可以被TCP协议发送的那部分,其实应用层需要发送的所有数据都被放进了发送者的发送缓冲区; -3. 发送窗口中相关的有四个概念:已发送并收到确认的数据(不再发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之中)、允许发送但尚未发送的数据以及发送窗口外发送缓冲区内暂时不允许发送的数据; -4. 每次成功发送数据之后,发送窗口就会在发送缓冲区中按顺序移动,将新的数据包含到窗口中准备发送; TCP建立连接的初始

流水线机制、滑动窗口协议、GBN、SR

老子叫甜甜 提交于 2019-12-16 20:59:14
一、滑动窗口协议 为了解决停等操作的性能问题(发了一个分组之后一直等到确认了这个分组才发下一个),推出了流水线机制,提供资源利用率。就是允许发送方在收到对方的ACK前,发送多个分组 其中窗口是一个范围管理发出去还没确认的分组,随着不断传输,这个窗口不断滑动,名称的由来。窗口左端的序号收到了ACK,就可以往右滑动了。 滑动窗口协议有GBN、SR 二、滑动窗口协议的实现:GBN 1.分组头部包含序列号 2.窗口如下,大小为N,最多允许N个分组未确认 3.ACK(n),则表示确认从开始到n(包含n)的序列号全部正确接收 4.会空中在传的分组设置一个Timer计时器,处理超时,如果收到了timeout(n)事件,那么会重传的是n以及n以后的所有分组(尽管后面的可能已经收到了,这就是回退,回退到n开始传,GBN) 5.接收方会有一个期望序列号,如果收到的不是期望的分组,直接丢弃 三、滑动窗口协议的实现:SR(选择重传) GBN缺陷,累积确认机制导致回退到N,重复传了很多。解决这个。 1.对每个分组分别确认,不再只接收期望的,接到不期望的,就先缓存(设置缓存机制),接到期望的才交付上层 2.发送方只需要重传那些没收到ACK的分组了 3.产生了接收方窗口(GBN只有发送方窗口),用来缓存,现在有两窗口了 4.序列号的位数是K的话,那么得满足 接收方窗口大小N+发送方N<= 2的k次方

滑动窗口机制

此生再无相见时 提交于 2019-12-16 18:26:54
(1).窗口机制 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1): 分析:①初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;②发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;③发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;④接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;⑤发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;⑥发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;⑦接收方已收到1号帧,1号窗口关闭

leetcode【高级】 滑动窗口最大值 java

不打扰是莪最后的温柔 提交于 2019-12-14 12:14:58
题干 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例: 输入 : nums = [ 1 , 3 , - 1 , - 3 , 5 , 3 , 6 , 7 ] , 和 k = 3 输出 : [ 3 , 3 , 5 , 5 , 6 , 7 ] 解释 : 滑动窗口的位置 最大值 -- -- -- -- -- -- -- - -- -- - [ 1 3 - 1 ] - 3 5 3 6 7 3 1 [ 3 - 1 - 3 ] 5 3 6 7 3 1 3 [ - 1 - 3 5 ] 3 6 7 5 1 3 - 1 [ - 3 5 3 ] 6 7 5 1 3 - 1 - 3 [ 5 3 6 ] 7 6 1 3 - 1 - 3 5 [ 3 6 7 ] 7 提示: 你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。 进阶: 你能在线性时间复杂度内解决此题吗? 想法 自然而然地有几个想法: 每移动一次,将这个移动后位置的数的大小和窗口中最大值比较,如果它比最大值大,那么将它更新为最大值。 否则仅仅是放到滑动窗口中 另一个点是:窗口大小有限,需要适时的删除已经过期的元素。 Java代码 class Solution { public

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

做~自己de王妃 提交于 2019-12-14 01:45:31
一维滑动窗口(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