【寻找one piece的算法之路】滑动窗口

💐个人主页初晴~

📚相关专栏:寻找one piece的刷题之路


什么是滑动窗口

滑动窗口算法是一种常用的算法模式,通常用于字符串匹配数组操作等问题中,特别是需要在一段连续的数据中寻找满足特定条件的子序列问题。它通过维护一个窗口(一段连续的子数组或子串),并在数据结构上滑动(移动)这个窗口,来寻找最优解或者满足特定条件的子序列。

滑动窗口算法的基本步骤

  1. 初始化窗口:选择一个起始点,并确定窗口的初始大小。
  2. 扩展窗口:从起始点开始,向右扩展窗口,直到找到一个满足特定条件的子序列。
  3. 收缩窗口:如果当前窗口的子序列仍然满足条件,尝试从左侧收缩窗口,直到不满足条件为止。
  4. 更新结果:在每次扩展和收缩窗口之后,检查当前窗口是否是最优解,并更新结果。
  5. 重复步骤:重复上述步骤,直到遍历完整个输入数据。

滑动窗口算法的优点

  • 效率高:相比暴力解法,滑动窗口算法可以在O(n)的时间复杂度内解决问题,其中n是输入数据的长度。
  • 易于实现:算法逻辑简单,易于理解和实现。
  • 适用性广:可以应用于多种不同类型的问题。

一、⻓度最⼩的⼦数组

题目链接

题目描述:

题目分析:

因为这题计算的是某一段区间的元素总和,是连续的,就可以尝试用滑动窗口来解决。每次固定好左指针l,然后让右指针r 不断向右遍历数组,并记录累加和sum,直到第一次区间【l,r】的sum>target时,我们就找到了以 l 为起始点的最大窗口,接着就没必要再继续向右扩展窗口了。此时就可以尝试舍去l,让l向右移动,缩小窗口,由于我们已经知道区间【l,r】的元素和了,就没必要再遍历计算一遍了。将sum减去之前 l 所指的元素值,就能得到区间【l+1,r】的元素和了。以此类推,我们只要不断维护好这个区间就能得出最终结果了

滑动流程:

1、初始化窗口:定义两个指针 l 和 r ,一开始都让他们指向0位置

2、扩展窗口:让 r 指向的元素“进入窗口”

3、收缩窗口:判断此时窗口内元素和与target大小关系

  • 如果大于等于:更新结果,将左端元素划出去的同时继续判断是否满⾜条件并更新结果(因为左端元素可能很⼩,划出去之后依旧满⾜条件)
  • 如果小于:说明窗口太小,  right++ ,另下⼀个元素进⼊窗⼝

4、重复步骤:重复上述步骤2与3,直到 指针r 遍历完整个输入数据

代码实现:

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int n=nums.length,min=Integer.MAX_VALUE,sum=0;
        for(in
### WordPiece 算法概述 WordPiece 是一种用于自然语言处理中的分词方法,其核心思想是从字符级别构建词汇表并逐步合并高频出现的字符组合来形成更复杂的词语单位[^3]。 #### WordPiece 算法流程描述 1. **初始化** - 定义初始字符集(通常为 Unicode 字符),作为最基础的词汇单元。 2. **频率统计** - 对整个语料库进行扫描,计算每一对相邻字符或现有词汇片段共同出现的概率。 3. **候选对选取** - 找出具有最高共现概率的一对字符/词汇片段作为最佳合并候选项。 4. **更新词汇表** - 将选定的最佳候选项加入到词汇表中,并将其视为一个新的不可再分割的整体。 5. **重复迭代** - 不断重复上述过程直到达到预设的最大词汇量大小或其他停止条件为止。 6. **应用阶段** - 当实际执行分词任务时,给定待处理字符串后,依据已建立好的词汇表寻找最长匹配项完成切分操作。 7. **特殊标记** - 使用特定前缀(如 `##`)表示该部分属于某个较大词汇的一部分而非独立单词起始位置。 ```plaintext +-------------------+ | 初始化字符集合 | +--------+----------+ | v +--------v-----------+ | 统计频次 |<----+ +--------+-----------+ | | | v | +--------v-----------+ | | 选择最优合并 | | +--------+-----------+ | | | v | +--------v-----------+ | | 更新词汇表 |-----+ +--------+-----------+ | v +--------v-----------+ | 是否满足终止条件? | +--------+-----------+ | / \ 否 是 / \ v v 回到循环 输出结果 ``` 此图表展示了 WordPiece 算法的主要工作流,从最初的字符级词汇创建开始,经过多次迭代优化直至获得理想的词汇列表。在具体实现过程中可能会有所调整,但基本逻辑保持一致。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值