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

做网站哪间好专业生产佛山网站建设

做网站哪间好,专业生产佛山网站建设,wordpress文章上下一篇 图片,wordpress 关键词排名算法简介 滑动窗口#xff0c;顾名思义#xff0c;就是有一个大小可变的窗口#xff0c;左右两端方向一致的向前滑动#xff08;右端固定#xff0c;左端滑动#xff1b;左端固定#xff0c;右端滑动#xff09;。 可以想象成队列#xff0c;一端在push元素#xf…算法简介 滑动窗口顾名思义就是有一个大小可变的窗口左右两端方向一致的向前滑动右端固定左端滑动左端固定右端滑动。 可以想象成队列一端在push元素另一端在pop元素如下所示 假设有数组[a b c d e f g h] 一个大小为3的滑动窗口在其上滑动则有: [a b c][b c d][c d e][d e f][e f g][f g h]适用范围 1、一般是字符串或者列表 2、一般是要求最值最大长度最短长度等等或者子序列 算法思想 1、在序列中使用双指针中的左右指针技巧初始化 left right 0把索引闭区间 [left, right] 称为一个窗口。2、先不断地增加 right 指针扩大窗口 [left, right]直到窗口中的序列符合要求。3、此时停止增加 right转而不断增加 left 指针缩小窗口 [left, right]直到窗口中的序列不再符合要求。同时每次增加 left前都要更新一轮结果。4、重复第 2 和第 3 步直到 right 到达序列的尽头。 思路其实很简单第 2 步相当于在寻找一个可行解然后第 3 步在优化这个可行解最终找到最优解。左右指针轮流前进窗口大小增增减减窗口不断向右滑动。 算法模板 1、单层循环 def template():# 初始化滑动窗口两端left right 0# 序列及序列长度seq, seq_len xx, xx# 滑动窗口序列slide_win []# 结果值rst xxwhile right seq_len:slide_win.append(seq[right])# 还没找到一个可行解if not avaliable(slide_win):# 扩大窗口right 1else:# 找到一个可行解更新结果值rst update()# 缩小窗口left 12、双层循环 def template():# 初始化滑动窗口两端left right 0# 序列及序列长度seq, seq_len xx, xx# 滑动窗口序列slide_win []# 结果值rst xxwhile right seq_len:slide_win.append(seq[right])# 还没找到一个可行解if not avaliable(slide_win):# 扩大窗口right 1continue# 循环更新可行解while avaliable(slide_win):# 找到一个可行解更新结果值rst update()# 缩小窗口left 1模板只是一个解题思路具体的题目可能需要具体分析但是大体框架是不变的。 记住: 多刷题多总结是王道 算法示例 1、最长不含重复字符的子字符串 from collections import dequeclass Solution(object):def lengthOfLongestSubstring(self, s)::type s: str:rtype: intif not s:return 0index 0# 因为这个滑动窗口需要从一端进一端出因此考虑采用队列slide_win deque()# 因为在滑动过程中需要不断的从窗口中增减元素因此需要一个变量来保持最大窗口长度max_len 1while index len(s):# 一个小的优化点还没有遍历的元素长度加上当前的窗口长度已经小于最大窗口长度则直接返回结果if len(slide_win) (len(s) - index) max_len:return max_len# 如果当前元素没有在滑动窗口中则加入并且窗口扩大if s[index] not in slide_win:slide_win.append(s[index])index 1else:# 如果当前元素已经在窗口中有值则更新最大窗口长度max_len max(max_len, len(slide_win))# 窗口缩小对端不变slide_win.popleft()return max(max_len, len(slide_win))2、绝对差不超过限制的最长连续子数组 import heapqclass Solution(object):def longestSubarray(self, nums, limit)::type nums: List[int]:type limit: int:rtype: intif not nums:return 0len_nums len(nums)# 因为需要比较子列表中的最大差值即需要知道子列表中的最大值和最小值# 因此采用大顶堆和小顶堆max_hq []min_hq []# 滑动窗口的前后索引left 0right 0# 在滑动窗口的过程中更新最大的窗口长度max_win 1while right len_nums:if len_nums - left max_win:return max_win# 将当前元素及其索引放入堆中因为python只有小顶堆因此这里采用负值来模拟大顶堆heapq.heappush(max_hq, (-nums[right], right))heapq.heappush(min_hq, (nums[right], right))# 窗口的最大差值diff -max_hq[0][0] - min_hq[0][0]# 最大差值在允许范围内窗口后边向前滑动左边保持不变if diff limit:right 1continue# 最大差值超过范围# 更新最大窗口长度max_win max(max_win, right - left)# 保证滑动窗口内的最大差值在允许范围内while -max_hq[0][0] - min_hq[0][0] limit:# 去掉大顶堆中在滑动窗口之外的所有最大元素while max_hq[0][1] left:heapq.heappop(max_hq)# 去掉小顶堆中在滑动窗口之外的所有最小元素while min_hq[0][1] left:heapq.heappop(min_hq)left 1return max(max_win, right - left)3、无重复字符的最长子串 from collections import deque class Solution(object):def lengthOfLongestSubstring(self, s)::type s: str:rtype: intif not s:return 0index 0# 因为这里需要从窗口的两端进行元素的增加或减少因此采用双端队列slide_win deque()# 题目要求最长子串长度因此需要在滑动过程中更新最大长度max_len 0while index len(s):ch s[index]# 如果当前元素不在窗口中则加入窗口if ch not in slide_win:slide_win.append(ch)# 窗口的右端向前滑动左端不变扩大窗口index 1else:# 当前元素已经存在窗口中即表示找到一个可行解更新最大长度max_len max(max_len, len(slide_win))Java开发交流君样756584822# 将窗口中在当前元素值之前的元素全部移除掉即窗口左端向前滑动右端不变缩小窗口while ch in slide_win:slide_win.popleft()return max(max_len, len(slide_win))4、替换后的最长重复字符 class Solution(object):def characterReplacement(self, s, k)::type s: str:type k: int:rtype: intif not s:return 0# 滑动窗口的左右两端left 0right 0# 记录每个字符出现的频率ch_fre defaultdict(int)# 记录字符出现的最大频率max_fre 0# 在窗口滑动过程中更新最大长度max_len 0while right len(s):ch s[right]# 当前字符频率加1ch_fre[ch] 1# 更新字符出现过的最大频率max_fre max(max_fre, ch_fre[ch])# 如果滑动窗口的长度大于字符能够达到的最大频率# 即窗口内不可能出现全是重复的字符因此需要将窗口的左端向前滑动缩小窗口if right - left 1 max_fre k:# 滑动出去的字符需要将其频率减1ch_fre[s[left]] - 1left 1# 此时滑动窗口内全是重复字符更新最大长度值 max_len max(max_len, right - left 1)# 滑动窗口的右端向前滑动扩大窗口right 1 //Java开发交流君样756584822return max_len算法总结 滑动窗口算法就是用以解决数组/字符串的子元素问题 滑动窗口算法可以将嵌套的for循环问题转换为单循环问题降低时间复杂度 最后祝大家早日学有所成拿到满意offer
http://www.huolong8.cn/news/318332/

相关文章:

  • 建网站得钱吗兰州门户网站建设
  • 谁能帮我做网站溧阳市建设网站
  • 影视网站设计网站服务器参数
  • 国内视差网站泰州东方医院
  • 廊坊网站建设推广经验制作网站的代码
  • 设计公司网站设计dw网页模板素材
  • 网站建设的心得与体会做网站上传图片
  • 医药行业网站建设云建站管理区
  • 社区网站搭建在线考试系统网站开发
  • 接做效果图网站如何做明星的个人网站
  • 贵溪网站建设wordpress 制作微信小程序
  • 网站建设有哪些环节婚礼礼服网站界面设计
  • 百度网站查反链wordpress我的世界
  • 重庆网站设计软件怎么看一个网站用什么系统做的
  • 山东网站建设培训驻马店网络
  • 长沙竞价网站建设报价威海网站开发制作
  • 做网站首页图片素材网站建设文字内容
  • 介绍自己做的网站邢台123式的网站怎么做
  • 对网站建设有什么样好的建设意见企业建设官方网站的目的
  • 淘客cms建站系统动漫在线制作网站
  • 非寻服饰网站建设规划书免费空间清理软件
  • 网站建设流程教程中国大数据平台官网
  • seo网站关键词优化1营销型网站建设
  • 如何在建设部网站补录项目青岛做个网站多少钱
  • 合肥论坛网站建设就有公司域名怎么建设网站
  • 公司网站怎么注销重庆长寿网站设计公司哪家专业
  • 网站开发使用的工具类网站建设頰算
  • 一个人可以完成网站建设吗广州安全教育平台视频
  • 自己的电脑做网站云存储商城网站用html做
  • 网站如何认证宿迁司法拍卖房产网