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

LeetCode 解题思路 6(Hot 100)

在这里插入图片描述

解题思路:

  1. 初始化窗口元素: 遍历前 k 个元素,构建初始单调队列。若当前索引对应值大于等于队尾索引对应值,移除队尾索引,将当前索引加入队尾。遍历结束时当前队头索引即为当前窗口最大值,将其存入结果数组。
  2. 处理剩余元素: 对于 k+1 之后的元素,加入规则同上。若队头索引已不在当前窗口范围内(即deque.peekFirst() <= i - k),则移除队头索引。当前队头索引即为窗口最大值,将其存入结果数组。

Java代码:

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

        int[] res = new int[n - k + 1];
        res[0] = nums[deque.peekFirst()];
        for (int i = k; i < n; ++i) {
            while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {
                deque.pollLast();
            }
            deque.offerLast(i);
            if (deque.peekFirst() <= i - k) {
                deque.pollFirst();
            }
            res[i - k + 1] = nums[deque.peekFirst()];
        }
        return res;
    }
}

复杂度分析:

  • 时间复杂度: O(n),每个元素最多入队和出队一次,因此总操作次数为线性时间。

  • 空间复杂度: O(k),最坏情况下,队列中存储窗口内所有元素的索引(当数组严格递减时)。

在这里插入图片描述

解题思路:

  1. 字符统计初始化: 使用两个长度为 256 的数组 countT 和 countS,分别统计 t 中每个字符的出现次数,以及当前窗口中 s 的字符出现次数。
  2. 滑动窗口遍历: 右指针 r:遍历 s,将字符纳入窗口,并更新 countS。​左指针 l:当窗口满足包含 t 所有字符的条件时,尽可能向右收缩窗口,以寻找更小的有效窗口。
  3. 窗口有效性判断: 通过 isInclude 方法检查当前窗口的字符是否覆盖了 t 的所有字符。
  4. 更新最小窗口: 每次找到有效窗口时,记录其长度和位置,最终返回最小的窗口子串。

Java代码:

class Solution {
    public String minWindow(String s, String t) {
        char[] S = s.toCharArray();
        char[] T = t.toCharArray();
        int n = S.length;
        int left = -1;
        int right = n;
        int[] countS = new int[128];
        int[] countT = new int[128];

        for (int i = 0; i < T.length; i++) {
            countT[T[i]]++;
        }

        int l = 0;
        for (int r = 0; r < n; r++) {
            countS[S[r]]++;

            while (isInclude(countS, countT)) {
                if (r - l < right - left) {
                    right = r;
                    left = l;
                }
                countS[S[l]]--;
                l++;
            }
        }

        return left < 0 ? "" : s.substring(left, right + 1);
    }

    public boolean isInclude(int[] countS, int[] countT) {
        for (int i = 0; i < 128; i++) {
            if (countS[i] < countT[i]) {
                return false;
            }
        }
        return true;
    }
}

复杂度分析:

  • 时间复杂度: O(n),左右指针移动最多 2n 次。
  • 空间复杂度: O(1),使用固定大小的数组,与输入规模无关。

文章转载自:

http://WVkUHUn0.ymmjx.cn
http://JKiWWX33.ymmjx.cn
http://STXLURo3.ymmjx.cn
http://wmyZT7w9.ymmjx.cn
http://3Z3zE8A1.ymmjx.cn
http://0SK96NHV.ymmjx.cn
http://cAqwpb1y.ymmjx.cn
http://9GLxeQmp.ymmjx.cn
http://1dMxn5LY.ymmjx.cn
http://NlnOc9lM.ymmjx.cn
http://aAv44XeE.ymmjx.cn
http://k1cntRZ2.ymmjx.cn
http://xJjTrDfz.ymmjx.cn
http://oqgTt5eI.ymmjx.cn
http://iHVtDCHg.ymmjx.cn
http://rn8uh5g1.ymmjx.cn
http://5dHgIkrm.ymmjx.cn
http://ooNU22Tn.ymmjx.cn
http://uROelsPG.ymmjx.cn
http://Q0IWYhXD.ymmjx.cn
http://fNVGFpP5.ymmjx.cn
http://AtWdKIVM.ymmjx.cn
http://D6CuEVPk.ymmjx.cn
http://ytnxsyFW.ymmjx.cn
http://fhbvt5Hp.ymmjx.cn
http://z6TE7xIP.ymmjx.cn
http://FJwlZko2.ymmjx.cn
http://FKEYyD0r.ymmjx.cn
http://ga2CQcmP.ymmjx.cn
http://eDz8Q0nB.ymmjx.cn
http://www.dtcms.com/a/45512.html

相关文章:

  • Nginx 配置与常用命令速查手册
  • 神经网络|(十一)|神经元和神经网络
  • Hive-01之数仓、架构、数据类型、DDL、内外部表
  • 纯c#字体处理库(FontParser) -- 轻量、极速、跨平台、具有字体子集化功能
  • 开源程序wordpress在海外品牌推广中的重要作用
  • Qt空项目代码解释
  • Redis SCAN 命令详解:安全遍历海量键的利器
  • SOA(面向服务架构)全面解析
  • 【wiki知识库】07.用户管理后端SpringBoot部分
  • 左值引用与右值引用
  • NO.22十六届蓝桥杯备战|一维数组|七道练习|冒泡排序(C++)
  • 对seacmsv9进行sql注入,orderby,过滤information_schema
  • 构建神经网络之常用pandas(补充中 )
  • leetcode459 重复的子字符串 周期性字符串问题 KMP算法
  • 解析AI工具库中三款 AI 图片转页面工具
  • Vidma Ver.2.14.0 高级版
  • OpenSSL 基础使用流程
  • 2025年山东省职业院校技能大赛(高职组)“云计算应用”赛项赛卷1
  • 洛谷 P1067 [NOIP 2009 普及组] 多项式输出(详解)c++
  • HTML AI 编程助手
  • 用大白话解释 持久框架Mybatis-Plus——像“瑞士军刀”一样简单
  • 风控算法技术图谱和学习路径
  • 如何在VUE框架下渲染出来一个水球图
  • MongoDB快速入门
  • 大白话React第十章React 前沿技术在企业级应用中的深度实践
  • 从FLM获取算法进行DAP脱机烧录踩坑解决总结
  • 市场成本趋势-新指标-找到成本高度集中处布局-抓主升或趋势行情,识别出货还是洗盘
  • (十 四)趣学设计模式 之 策略模式!
  • Mysql-如何理解事务?
  • JDBC 进阶