”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 两个指针和滑动窗口模式

两个指针和滑动窗口模式

发布于2024-09-11
浏览:654

Two Pointer and sliding window pattern

双指针和滑动窗口模式

模式 1:常量窗口(如 window = 4 或某个整数值)

例如,给定一个(-ve 和 ve)整数数组,找到大小为 k 的连续窗口的最大和.

模式2:(可变窗口大小)具有的最大子数组/子字符串示例:sum

  • 方法:
    • 蛮力: 生成所有可能的子数组并选择最大长度的子数组 sum
  • 最佳/最佳: 利用两个指针和滑动窗口将时间复杂度降低到O(n)

模式3:子数组/子字符串的数量,其中像sum=k。
这个问题很难解决,因为何时扩展(右)或何时收缩(左)变得很困难。

这个问题可以用模式2
来解决 用于解决诸如查找 sum =k.

的子串数量之类的问题
  • 这可以细分为

    • 查找 sum 的子数组
    • 查找sum

模式4:找到最短/最小窗口

模式 2 的不同方法
示例:sum

public class Sample{
    public static void main(String args[]){
        n = 10;
        int arr[] = new int[n];

        //Brute force approach for finding the longest subarray with sum  k) break; /// optimization if the sum is greater than the k, what is the point in going forward? 
            }
        }

使用两个指针和滑动窗口的更好方法

        //O(n n) in the worst case r will move from 0 to n and in the worst case left will move from 0 0 n as well so 2n
        int left = 0;
        int right =0;
        int sum = 0;
        int maxLen = 0;
        while(right k){
                sum = sum-arr[left];
                left  ;
            }
            if(sum 



最佳方法
我们知道,如果找到子数组,我们将其长度存储在 maxLen 中,但是在添加 arr[right] 时,如果总和大于 k,那么当前我们通过执行 sum = sum-arr[left] 和 left 来向左收缩。
我们知道当前的最大长度是maxLen,如果我们继续缩小左索引,我们可能会得到另一个满足条件( maxLen 的子数组,则仅更新 maxLen。

当子数组不满足条件 (

        int right =0;
        int sum = 0;
        int maxLen = 0;
        while(right k){// this will ensure that the left is incremented one by one (not till the sum




          

            
  

            
        
版本声明 本文转载于:https://dev.to/prashantrmishra/two-pointer-and-sliding-window-pattern-4118?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • React:了解 React 的事件系统
    React:了解 React 的事件系统
    Overview of React's Event System What is a Synthetic Event? Synthetic events are an event-handling mechanism designed by React to ach...
    编程 发布于2024-11-05
  • 为什么在使用 Multipart/Form-Data POST 请求时会收到 301 Moved Permanently 错误?
    为什么在使用 Multipart/Form-Data POST 请求时会收到 301 Moved Permanently 错误?
    Multipart/Form-Data POSTs尝试使用 multipart/form-data POST 数据时,可能会出现类似所提供的错误消息遭遇。理解问题需要检查问题的构成。遇到的错误是 301 Moved Permanently 响应,表明资源已被永久重定向。当未为 multipart/f...
    编程 发布于2024-11-05
  • 如何使用日期和时间对象确定 PHP 中的时间边界?
    如何使用日期和时间对象确定 PHP 中的时间边界?
    确定 PHP 中的时间边界在此编程场景中,我们的任务是确定给定时间是否在预定义的范围内。具体来说,我们得到三个时间字符串:当前时间、日出和日落。我们的目标是确定当前时间是否位于日出和日落的边界时间之间。为了应对这一挑战,我们将使用 DateTime 类。这个类使我们能够表示和操作日期和时间。我们将创...
    编程 发布于2024-11-05
  • 如何使用 CSS 变换比例修复 jQuery 拖动/调整大小问题?
    如何使用 CSS 变换比例修复 jQuery 拖动/调整大小问题?
    jQuery 使用 CSS 变换缩放拖动/调整大小问题: 当应用 CSS 变换时,特别是变换:矩阵(0.5, 0, 0, 0.5, 0, 0);,对于一个 div 并在子元素上使用 jQuery 的draggable() 和 resizing() 插件,jQuery 所做的更改变得与鼠标位置“不同步...
    编程 发布于2024-11-05
  • 如何修复 TensorFlow 中的“ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点)”错误?
    如何修复 TensorFlow 中的“ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点)”错误?
    TensorFlow:解决“ValueError: Failed to Convert NumPy Array to Tensor (Unsupported Object Type Float)”工作时遇到的常见错误TensorFlow 的错误是“ValueError:无法将 NumPy 数组转换为...
    编程 发布于2024-11-05
  • 如何高效判断本地存储项是否存在?
    如何高效判断本地存储项是否存在?
    确定本地存储项目是否存在使用 Web 存储时,在访问或修改特定项目之前验证它们是否存在至关重要。在本例中,我们想要确定 localStorage 中是否设置了特定项目。当前方法检查项目是否存在的当前方法似乎是:if (!(localStorage.getItem("infiniteScro...
    编程 发布于2024-11-05
  • Java 中的原子是什么?了解 Java 中的原子性和线程安全
    Java 中的原子是什么?了解 Java 中的原子性和线程安全
    1. Java 原子简介 1.1 Java 中什么是原子? 在Java中,java.util.concurrent.atomic包提供了一组支持对单个变量进行无锁线程安全编程的类。这些类统称为原子变量。最常用的原子类包括 AtomicInteger 、 Atomic...
    编程 发布于2024-11-05
  • 前端/后端主要配置文件
    前端/后端主要配置文件
    从 DevOps 的角度来看,了解 Java 和 Node.js(后端和前端)代码库中的配置文件对于管理构建流程、部署和环境设置至关重要。以下是在 Java 和 Node.js 应用程序中需要注意的配置文件的完整列表: Java 应用程序 后端 pom.xml (Maven): 管理...
    编程 发布于2024-11-05
  • Python 中出现“意外缩进”错误的原因以及如何解决?
    Python 中出现“意外缩进”错误的原因以及如何解决?
    Python 中意外缩进的意义是什么?在 Python 编程领域,精心制作的缩进起着至关重要的作用定义代码的结构和流程。当这个缩进不经意间被打乱时,就会出现“unexpected indent”错误,提示需要立即纠正。错误信息背后:Unexpected Indent本质Python 的语法要求代码块...
    编程 发布于2024-11-05
  • 在 Node.js 中什么时候应该使用 `setImmediate` 和 `process.nextTick`?
    在 Node.js 中什么时候应该使用 `setImmediate` 和 `process.nextTick`?
    了解 setImmediate 和 nextTick 之间的差异Node.js 版本 0.10 引入了 setImmediate,这是一个旨在补充 process.nextTick 的新 API。这两个函数都提供了异步执行回调的方法,但它们具有控制其使用的独特特征。nextTick:快速和同步pro...
    编程 发布于2024-11-05
  • jQuery中如何高效获取隐藏元素的高度?
    jQuery中如何高效获取隐藏元素的高度?
    在 jQuery 中获取隐藏元素的高度处理隐藏元素时,检索其高度可能具有挑战性。暂时显示元素以测量其高度然后再次隐藏它的传统方法似乎效率低下。有没有更优化的解决方案?jQuery 1.4.2 方法这是一个使用 jQuery 1.4.2 的示例:$select.show(); optionHeight...
    编程 发布于2024-11-05
  • 为什么我不能在 Go Struct 标签中使用变量?
    为什么我不能在 Go Struct 标签中使用变量?
    在 Go 结构体标签中使用变量在 Go 中,结构体标签用于指定有关结构体中字段的元数据。虽然可以使用字符串文字定义标签,但尝试在其位置使用变量会导致错误。无效用法:const ( TYPE = "type" ) type Shape struct { Type s...
    编程 发布于2024-11-05
  • Qopy:作为开发人员我最喜欢的剪贴板管理器
    Qopy:作为开发人员我最喜欢的剪贴板管理器
    作为一名开发人员,我一直在寻找可以使我的工作流程更顺畅、更高效的工具。最近,我偶然发现了 Qopy,一个可以在 Linux 和 Windows 上运行的开源剪贴板管理器。 什么是Qopy? Qopy 是一个简单的剪贴板管理器,旨在改进标准剪贴板体验。它的设计宗旨是用户友好、可靠且快速...
    编程 发布于2024-11-05
  • 为什么我的按钮上的悬停效果不起作用?
    为什么我的按钮上的悬停效果不起作用?
    更改悬停时的按钮颜色:替代解决方案尝试更改悬停时按钮的颜色时,如果出现以下情况,可能会令人沮丧该解决方案未能产生预期的效果。考虑提供的示例代码:a.button { ... } a.button a:hover{ background: #383; }此解决方案尝试在链接悬停在“按钮...
    编程 发布于2024-11-05
  • 仅使用 Python 构建前端
    仅使用 Python 构建前端
    对于专注于后端的开发人员来说,前端开发可能是一项艰巨的、甚至是噩梦般的任务。在我职业生涯的早期,前端和后端之间的界限是模糊的,每个人都被期望能够处理这两者。 CSS,尤其是,是一场持续不断的斗争;这感觉像是一个不可能完成的任务。 虽然我喜欢前端工作,但 CSS 对我来说仍然是一个复杂的挑战,特别是因...
    编程 发布于2024-11-05

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3