当前位置: 首页 > news >正文

龙岗网站建设 公司推广金泉网做的山东黄锈石网站有哪些

龙岗网站建设 公司推广,金泉网做的山东黄锈石网站有哪些,西安网站搭建费用,做淘宝客网站需要什么资质力扣题目链接 给定一个数组 nums#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 示例#xff1a; 输入#xff1a;nums[1,3,-1,-3,5,3,6,7],k 3 …力扣题目链接 给定一个数组 nums有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 示例 输入nums[1,3,-1,-3,5,3,6,7],k 3 输出[3,3,5,5,6,7] 题干很简单不考虑复杂度的话那就是定义一个空数组遍历一遍的过程中每次从窗口中再找到最大的数值加入空数组呗。但在考虑复杂度的情况下你可以利用队列来完成这个题目将数组nums中的数慢慢推进队列按规则对数进行进出操作这样复杂度就降低了很多。 那么到底怎么去制定进出规则呢我们结合代码进行分析《代码随想录》完整代码如下 from collections import dequeclass MyQueue: #单调队列从大到小def __init__(self):self.queue deque() #这里需要使用deque实现单调队列直接使用list会超时#每次弹出的时候比较当前要弹出的数值是否等于队列出口元素的数值如果相等则弹出。#同时pop之前判断队列当前是否为空。def pop(self, value):if self.queue and value self.queue[0]:self.queue.popleft()#list.pop()时间复杂度为O(n),这里需要使用collections.deque()#如果push的数值大于入口元素的数值那么就将队列后端的数值弹出直到push的数值小于等于队列入口元素的数值为止。#这样就保持了队列里的数值是单调从大到小的了。def push(self, value):while self.queue and value self.queue[-1]:self.queue.pop()self.queue.append(value)#查询当前队列里的最大值 直接返回队列前端也就是front就可以了。def front(self):return self.queue[0]class Solution:def maxSlidingWindow(self, nums: List[int], k: int) - List[int]:que MyQueue()result []for i in range(k): #先将前k的元素放进队列que.push(nums[i])result.append(que.front()) #result 记录前k的元素的最大值for i in range(k, len(nums)):que.pop(nums[i - k]) #滑动窗口移除最前面元素que.push(nums[i]) #滑动窗口前加入最后面的元素result.append(que.front()) #记录对应的最大值return result from collections import deque 导入第三方库中的队列。我们继续去分析自定义的三个函数。 def pop(self, value):if self.queue and value self.queue[0]:self.queue.popleft()#list.pop()时间复杂度为O(n),这里需要使用collections.deque() 首先是出队列规则队列存在将队列第一个值推出。那直接用popleft将最左边的数推出不就行了吗为什么还要判断要推出的值是不是等于队列最左边的值呢这就涉及到了后面第二个函数push进队列的规则和主代码程序了我们继续往下看。 def push(self, value):while self.queue and value self.queue[-1]:self.queue.pop()self.queue.append(value) 其次是进队列规则先进行while循环队列存在如果新进的数大于队列中最右侧数即上一个进队列的数那就将最右侧数推出直接pop推出最左侧数才需要特意说明popleft一直循环直到队列中最右侧的数大于等于新进数那就把新进数加入队列。 因为进队列的规则所以如示例中第一个滑动窗口为1,3-1时1先进入队列3进入时根据规则将1推出再进入-1所以该滑动窗口中进入队列的只有3和-1。 def front(self):return self.queue[0] 最后是找出最大值的函数既然我们的队列是从大到小排列那么每次滑动窗口中的最大值就是队列中的第一个数直接return到quene[0]就行了。 接下来看主程序代码 def maxSlidingWindow(self, nums: List[int], k: int) - List[int]:que MyQueue()result []for i in range(k): #先将前k的元素放进队列que.push(nums[i])result.append(que.front()) #result 记录前k的元素的最大值for i in range(k, len(nums)):que.pop(nums[i - k]) #滑动窗口移除最前面元素que.push(nums[i]) #滑动窗口前加入最后面的元素result.append(que.front()) #记录对应的最大值return result 定义一个空队列一个空数组用来储存最大值。接着先将滑动窗口中的数推进队列根据push定义的规则示例中第一次滑动窗口只有3和-1进入了队列先储存队列中的第一个数。 接着开始移动滑动窗口首先推出滑动窗口第一个数这里就可以解释我们上文在pop函数定义时留下的问题了理论上滑动窗口第一个数nums[i-k]需要被推出但类似示例中这种情况时首次滑动窗口的1,3-1推出nums[i-k]nums[0]1但1在push进入队列时就已经被推出了要推出的值value不等于队列中的第一个数代表着在push过程中就已经被推出了那我还要推出吗那就不需要了1,3-1中按规则3还能参加下一次滑动窗口因此在pop函数中定义了这一规则。 其次按规则push一个新的数将每次滑动窗口中进入队列中的数的最大值加入result数组最终return到result数组。
http://www.hkea.cn/news/14451426/

相关文章:

  • 网站做好了如何发布北京seo网站管理
  • 长春网长春关键词排名站设计商务网站推广技巧包括什么
  • 照片做视频ppt模板下载网站好南京网站制作哪家好
  • 嘉兴网站专业做网站涉及个人隐私
  • jsp企业网站分公司注册流程网上注册
  • 如何用自己网站做大电商wordpress写的网站
  • 南京建设网站首页sketch做网站
  • 网站联盟营销模板网站代理
  • 淮安哪个做网站好点二手车网站模板建设
  • 江苏靖江苏源建设有限公司网站浙江省住房与城乡建设部网站
  • 美容院网站源码天猫网站平面广告
  • 旅游网站前台模板哈尔滨网站建设方案
  • 学校网站建设xmlwordpress 数据库解析
  • 百度推广网站可以链接到同公司另一个网站吗html用什么软件打开
  • 唯品会网站建设特色海口制作网站
  • 网站开发项目扶持政策有哪些做公益网站的目的
  • 怎么做logo网站百度手机卫士下载安装
  • 天门网站建设wordpress换模板
  • 免费的网站域名查询app国美电器网上商城
  • 为什么做网站都用php网上虚拟银行注册网站
  • 受欢迎的汕头网站推广腾讯企点聊天记录老板能看到吗
  • 商业网站开发实训内容短网站生成
  • 淘宝优惠券发布网站怎么做上海开发网站
  • 企业站官方网站张掖市住房和城乡建设局网站
  • 网站如何留住用户手机网络不稳定怎么解决
  • 个人网站首页内容荥阳市建设局网站
  • 龙岩网站定制北京平面设计网站
  • 泰国网站域名深圳媒体网络推广有哪些
  • 只做英文网站 域名有什么要求网页链接生成
  • 为古汉字老人做网站wordpress分类别名获取文章