滑动窗口

滑动窗口,记录左边界,通过map避免字符重复。

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s == null || s.length() == 0) {
            return 0;
        }

        int l = 0;
        int max = 0;
        Map map = new HashMap<>();
        for(int r = 0; r < s.length(); r++) {
            char current = s.charAt(r);
            if(map.containsKey(current)) {
                l = Math.max(l, map.get(current) + 1);
            }
            max = Math.max(r - l + 1, max);
            map.put(current, r);
        }
        return max;
    }
}

该题难点在于如果获取k的滑动窗口内的最大值。维护一个长度为k的单调队列,从大到小排序,当滑动窗口向右移动时,需要比较待加入的值和滑动窗口内最小值。
// 7 2 2 4

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int n = nums.length;
        Deque deque= new ArrayDeque<>();
        for(int i = 0; i < k; i++) {
            while(!deque.isEmpty() && nums[i] > nums[deque.peekLast()]) {
                deque.pollLast();
            }
            deque.offerLast();
        }
        int[] ans = new int[n - k + 1];
        ans[0] = nums[deque.peekFirst()];
        for(int i = k; i < n; i++) {
            while(!deque.isEmpty() && nums[i] > nums[deque.peekLast()]) {
                deque.pollLast();
            }
            deque.offerLast(i);
            while(i - k >= deque.peakFirst()) {
                deque.pollFirst();
            }
            ans[i - k + 1] = nums[deque.peekFirst()];
        }
        return ans;
    }
}

Original: https://www.cnblogs.com/shitianming/p/16739808.html
Author: 天山琴子
Title: 滑动窗口

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598664/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • centos系统下mysql的配置

    配置文件路径 /etc/my.cnf Hole yor life get everything if you never give up. Original: https://ww…

    数据库 2023年6月9日
    060
  • B树-删除

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 删除 根据B树的以下两个特性 每一个非叶子结点(除根结点)最少有 ⌈ m/2⌉ 个子结点 有k…

    数据库 2023年6月14日
    067
  • MySQL函数1(单行函数)

    单行函数 函数的理解 分类 数值函数 基本函数 PI()无参数 CETL \ CETLING()天花板函数(取比自己大的相邻的数) FLOOR()地板函数(取比自己小的相邻的数) …

    数据库 2023年5月24日
    087
  • zabbix模板,角色,用户,权限管理

    用户管理 用户组 用户角色 用户 模板管理 模板组 模板 posted @2022-09-07 22:22 溜溜威 阅读(16 ) 评论() 编辑 Original: https:…

    数据库 2023年6月14日
    092
  • day39-网络编程01

    Java网络编程01 1.网络相关的概念 1.1网络通信和网络 *网络通信 概念:两台设备之间通过网络实现数据传输 网络通信:将数据通过网络从一台设备传输到另一台设备 java.n…

    数据库 2023年6月11日
    094
  • 安装Pycharm2022.2.1版本操作说明

    下载pycharm:https://www.jetbrains.com.cn/pycharm/download/#section=windows 我下载的是社区版”Co…

    数据库 2023年6月14日
    0156
  • Java 多线程共享模型之管程(下)

    共享模型之管程 wait、notify wait、notify 原理 Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING 状态 B…

    数据库 2023年6月16日
    095
  • Java 线程是如何启动的?

    Java启动线程的代码: 根据以上代码分析,并从源码了解启动线程发生了以下事件来完成启动线程: 1、Java 创建线程和启动 2、调用本地方法 start0(); 3、JVM 中 …

    数据库 2023年6月16日
    072
  • JavaScript进阶内容——DOM详解

    JavaScript进阶内容——DOM详解 当我们已经熟练掌握JavaScript的语法之后,我们就该进入更深层次的学习了 首先我们思考一下:JavaScript是用来做什么的? …

    数据库 2023年6月14日
    0141
  • 2018年最新JAVA面试题总结之基础(1)

    转自于:https://zhuanlan.zhihu.com/p/39322967 1、JAVA中能创建volatile数组吗?volatile能使得一个非原子操作变成原子操作吗?…

    数据库 2023年6月16日
    075
  • gin 使用pprof 进行性能分析

    开发中发现接口的耗时有点久,需要分析一下,之前也使用过pprof,但没有整理,又重新百度了一下,这次就记一下。 在main 文件中加入 pprof.Register(engine)…

    数据库 2023年6月9日
    078
  • MYSQL–>事务

    事务是一组操作的集合,它是一个不可分割的工作单位。 事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败 开启事务—->…

    数据库 2023年6月14日
    072
  • spring-boot-starter-actuator

    使用: HTTP方法 路径 描述 鉴权 GET /autoconfig 查看自动配置的使用情况 true GET /configprops 查看配置属性,包括默认配置 true G…

    数据库 2023年6月16日
    070
  • 自动化测试练手项目推荐

    转载请注明出处❤️ 作者:测试蔡坨坨 原文链接:caituotuo.top/80599ac8.html 你好,我是测试蔡坨坨。 最近收到许多自学自动化测试的小伙伴私信,学习了理论知…

    数据库 2023年6月11日
    0101
  • MySQL Operator 01 | 架构设计概览

    高日耀 资深数据库内核研发毕业于华中科技大学,喜欢研究主流数据库架构和源码,并长期从事分布式数据库内核研发。曾参与分布式 MPP 数据库 CirroData 内核开发(东方国信),…

    数据库 2023年5月24日
    084
  • 5个必知的高级SQL函数

    5个必知的高级SQL函数 SQL是关系数据库管理的标准语言,用于与数据库通信。它广泛用于存储、检索和操作数据库中存储的数据。SQL不区分大小写。用户可以访问存储在关系数据库管理系统…

    数据库 2023年6月11日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球