前端算法之滑动窗口

  • 滑动窗口
    • 滑动窗口思路:
    • 举例: 在一个数组中查找连续子数组的最大值之和。
    • 举例: 无重复字符的最长子串

滑动窗口

滑动窗口(Sliding Window)是一种常用的算法技巧,用于处理数组或字符串相关的问题。

它通过维护一个固定大小的窗口来解决问题。

具体来说,滑动窗口算法通常包含以下步骤:

  1. 初始化窗口的起始位置和结束位置。
  2. 将窗口内的元素进行处理,得到想要的结果。
  3. 移动窗口的起始位置或结束位置,即滑动窗口的过程。
  4. 重复步骤2和步骤3,直到遍历完整个数组或字符串。

滑动窗口思路:

1. 先进行右侧指针(窗口)移动位置(后移)
2. 判断是否符合预期。1. 符合,进行其他处理,比如reurn等2. 不符合,判断左侧指针是否移动位置1. 移动或着不移动 
3. 进入下一次循环 

滑动窗口算法的优势在于其时间复杂度通常为O(n),其中n为数组或字符串的长度。这使得滑动窗口算法在处理大规模数据时非常高效。

滑动窗口算法可以应用于许多问题,如:

  • 查找最长子串、
  • 求和等。

它的核心思想是通过调整窗口的起始位置和结束位置来寻找最优解

举例: 在一个数组中查找连续子数组的最大值之和。

当使用JavaScript来实现滑动窗口算法时,我们可以举一个经典的例子:

在一个数组中查找连续子数组的最大值之和。

下面是使用JavaScript实现滑动窗口算法求解最大子数组和的示例代码:

function maxSubarraySum(nums, k) {let windowSum = 0;for (let i = 0; i < k; i++) {windowSum += nums[i]; // 计算初始窗口的和}let maxSum = windowSum; // 初始化最大和为窗口的初始和for (let i = k; i < nums.length; i++) {windowSum = windowSum + nums[i] - nums[i - k]; // 移动窗口,更新窗口的和maxSum = Math.max(maxSum, windowSum); // 更新最大和}return maxSum;
}// 示例输入
let nums = [1, -3, 2, 4, -1, 5, -2, 3];
let k = 3;// 调用函数求解最大子数组和
let result = maxSubarraySum(nums, k);
console.log("最大子数组和:", result);

在这个例子中,我们定义了一个maxSubarraySum函数,该函数接受一个数组nums和一个整数k作为参数,用于求解数组中长度为k的连续子数组的最大和。通过维护一个长度为k的窗口,不断调整窗口的位置来求解最大子数组和。

通过这个示例,你可以看到如何使用JavaScript实现滑动窗口算法来解决问题。滑动窗口算法在实际应用中非常常见,能够高效地处理数组和字符串相关的问题。

举例: 无重复字符的最长子串

地址:https://leetcode.cn/problems/longest-substring-without-repeating-characters/

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

解答

/*** @param {string} s* @return {number}*/
var lengthOfLongestSubstring = function(s) {// 思路:// 1. 先进行右侧指针(窗口)移动位置(后移)// 2. 判断是否符合预期。//  2.1 符合,进行其他处理,比如reurn等//  2.2 不符合,左侧指针是否移动位置//      2.2.1 移动或着不移动// 3. 进入下一次循环if(s.length <=1){return s.length }//定义指针let left = 0let right = 1// 定义无重复最长字串let max = 0// 定义字串let temp// 当且仅当右侧指针向右侧移动不超过swhile(right < s.length){temp = s.slice(left,right) // splice(0,1)// 判断当前元素是否包含right所在位置下表元素if(temp.indexOf(s.charAt(right)) > -1){left ++continue} else {right ++}if(right - left > max){max = right - left} }return max 
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亿级流量场景下如何优化混合回收

大白话&#xff1a; 我们完全可以通过最大停顿时间的调整&#xff0c;来控制每次垃圾回收的region数量以及回收垃圾大小。 大白话&#xff1a; 1.是已分配内存占总内存的超过45%阈值&#xff1b; 2.优化G1垃圾回收关键的一点&#xff0c;设置合理的最大停顿时间。 大白话&#…

打破数据孤岛:ChatGPT如何打通金融大数据的任督二脉?

文章目录 一、引言二、ChatGPT与金融大数据分析的融合三、实践应用&#xff1a;ChatGPT在金融大数据分析中的优势与挑战四、案例分析&#xff1a;ChatGPT在金融大数据分析中的应用案例五、前景展望&#xff1a;ChatGPT在金融大数据分析领域的未来发展《AI时代Python金融大数据分…

数据仓库-数仓优化小厂实践

一、背景 由于公司规模较小&#xff0c;大数据相关没有实现平台化&#xff0c;相关的架构都是原生的Apache组件&#xff0c;所以集群的维护和优化都需要人工的参与。根据自己的实践整理一些数仓相关的优化。 二、优化 1、简易架构图 2、ODS层优化 2.1 分段式解析 随着业务增长…

美团面试:索引的设计规范,你知道哪些?

美团面试&#xff1a;索引的设计规范&#xff0c;你知道哪些&#xff1f; 尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;尼恩一直在指导大家改造简历、指导面试。指导很多小伙伴拿到了一线互联网企业网易、美团、字节、如阿里、滴滴、极兔、有赞、希音、百…

智慧园区物联综合管理平台之系统集成功能及接口需求

南向接口 高端制造园区联网平台南向主要面对各园区各项公共物联设施接入。 南向所接入的接口类型、 数据协议等也种类繁多, 平台根据实际调研情况及未来发展趋势, 梳理了十几种设备以及协议接入的情况, 依据此情况, 园区物联管理平台设计了标准的、 统一的南向的标准SDK调…

2023年12月31日_解读openai的新对齐论文

如果人类无法监督超级人工智能 那么人工智能可以么&#xff1f; 过去一年 以预测下一个Token为本质的大模型 已经横扫了人类世界的多项任务 展现了人工智能的巨大潜力 Ilya Sutskever也大胆预言 如果模型能够很好地预测下一个token 那么意味着它能够理解导致这个token产生的深刻…

多边形的填充算法的分析

多边形的填充 分析 思路一 我们之前已经实现了对直线的扫描转换&#xff0c;但是现在我们遇到了新的问题那就是如何对多边形进行填充&#xff0c;如图所示&#xff0c;如何对图示的多边形进行填充呢&#xff1f; 我所想到的第一个办法是这样的&#xff0c;那就是假设上顶点…

webRTC实时通信demo

参考文档&#xff1a; https://www.jianshu.com/p/f439ce5cc0be https://www.w3cschool.cn/socket demo流程示意图&#xff08;用户A向用户B推送视频&#xff09;&#xff1a; #mermaid-svg-0KZaDQ5DBl28zjmZ {font-family:"trebuchet ms",verdana,arial,sans-seri…

总结—elasticsearch启动失败的几种情况及解决

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 摘要 本文主要梳理从ES初学以来所遇到的启动失败的几种情况。 1、使用root用户启动失败 在有一次搭建elasticsearch的时候&am…

除了国家自然科学基金,还有以下科研基金

除了国家自然科学基金&#xff0c;还有以下科研基金&#xff1a; 国家社科基金&#xff1a;这是国家社会科学基金的简称&#xff0c;主要支持国内的社会科学研究项目。国家重点实验室和国家工程&#xff08;技术&#xff09;研究中心开放基金&#xff1a;这些基金主要支持在国…

【Linux】—— 匿名管道

前言&#xff1a; 接下来我将带大家探索 进程间通信 的方式。本期&#xff0c;要讲的就是管道其中之一“匿名管道”&#xff01;&#xff01; 目录 &#xff08;一&#xff09;进程间通信介绍 1、进程间通信目的 2、进程间通信发展 3、进程间通信分类 &#xff08;二&…

(JAVA)-(网络编程)-UDP协议

在上上文章中我们简单了解了UDP通信协议和TCP协议。这篇文章 来讲解java中如何使用UDP协议发送数据。 UDP通信协议发送数据&#xff1a; 而使用UDP通信协议发送数据也可以看成是寄快递的过程。 在寄快递的过程中&#xff0c;我们首先得找快递公司&#xff0c;接着得打包好礼物…

文件分片上传(模拟网盘效果)

文件分片上传&#xff08;模拟网盘效果&#xff09; 文章说明简单模拟拖拽文件夹和选择文件的进度条效果效果展示结合后端实现文件上传效果展示加上分片的效果效果展示加上MD5的校验&#xff0c;实现秒传和分片的效果后续开发说明源码下载 文章说明 文章主要为了学习文件上传&a…

2024年【黑龙江省安全员C证】考试及黑龙江省安全员C证找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年黑龙江省安全员C证考试为正在备考黑龙江省安全员C证操作证的学员准备的理论考试专题&#xff0c;每个月更新的黑龙江省安全员C证找解析祝您顺利通过黑龙江省安全员C证考试。 1、【多选题】下列属于编制安全检查…

浅聊配置化-要不要实现动态表单

1、配置化的原则 配置化是一种抽象&#xff0c;把事物分成2类&#xff1a;不变的&#xff0c;可变的。 如果事物都是可变的&#xff0c;是无法实现配置化的。 配置化的根本在于找到不变的事物&#xff0c;基于不变的事物进行可变事物的配置。 所以&#xff0c;认为一切皆可…

[LLM]大模型训练(二)--DeepSpeed使用

安装DeepSpeed与集成 DeepSpeed可以通过pip安装&#xff0c;无需指定PyTorch和CUDA的版本。DeepSpeed内包含需要自定义的CUDA算子&#xff0c;将通过即时编译的方式在运行时构建。 pip install deepspeed DeepSpeed与HuggingFace Transformers直接集成。使用者可以通过在模型…

从入门到精通,30天带你学会C++【第十一天:二分查找】

目录 Everyday English 前言 二分查找 例题 50分做法 分析利弊 示例代码 示例截图 100分做法 二分查找是什么&#xff1f; 这题该怎么用二分查找&#xff1f; 示例代码 示例截图 结尾 Everyday English Look before you leap. 三思而后行 前言 今天是2024年的…

高创驱动器设置备忘

1&#xff1a;高创驱动器连接软件SVRstudio 有一代和二代&#xff0c;这里为了简述方便称SV1,SV2版本&#xff0c;它们都可以连接驱动器&#xff0c;只是使用界面上有些差异而已&#xff0c;为了设置方便的需要&#xff0c;建议同时安装两个版本&#xff1b; 2&#xff1a;通常…

爬取糖豆视频

爬虫案例积累&#xff0c;以爬取糖豆视频为例&#xff1a; 爬取视频类型的数据一般步骤&#xff1a; 1.点击media,刷新&#xff0c;播放一个视频&#xff0c;会刷新一个包&#xff0c;点击发现是播放视频的包&#xff0c; 2.复制这个包url中的关键字&#xff0c;在搜索框中进…

在宝塔Linux中安装Docker

前言 帮助使用宝塔的用户快速上手docke的安装 &#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Docker》。&#x1f3af;&#x1f3af…