力扣打卡day06——滑动窗口最大值、最小覆盖子串

239. 滑动窗口最大值 - 力扣(LeetCode)

思路:

自己定义构造单调队列,队列中的首部就是每个窗口的最大元素,每次弹出元素的时候,判断要弹出元素是不是队列里面的最大值(就是队列的首部),加入队列,比加入元素小的全部都弹出。

代码:

主要就是用res 记录每个窗口的最大值,在计算第一个窗口的最大值,最后进行循环即可。

复制代码
,class Mydeque{
       //自己定义构造单调队列
         Deque<Integer> deque=new LinkedList<>();

        //弹出队列,判断要弹出元素是不是队列里面的最大值
        void poll(int val){
            if(!deque.isEmpty()&&val==deque.peek()){
                deque.poll();
            }
        }
        //加入队列,比元素小的全部都弹出
         void add(int val){
            while(!deque.isEmpty()&&val>deque.getLast()){
                    deque.removeLast();
            }
            deque.add(val);
         }
         //队列的顶部就是最大元素
         int peek(){
          return   deque.peek();
         }
}

class Solution {
    
   
    public int[] maxSlidingWindow(int[] nums, int k) { 
          int n=nums.length;
          int len=n-k+1; 
          int []res=new int[len];//每个窗口的最大值
          int  rar=0; //记录下标
          Mydeque mydeque=new Mydeque();
          //前三个元素加入
          for(int i=0;i<k;i++){
             mydeque.add(nums[i]);
          }
          res[rar++]=mydeque.peek();//第一个窗口最大值

          for(int i=k;i<n;i++){
            //滑动窗口移除最前面的元素
             mydeque.poll(nums[i-k]);
             //滑动窗口加入最后面的元素
             mydeque.add(nums[i]);
             //记录对应的最大值
             res[rar++]=mydeque.peek();
          }
          return res;

    }
}

作者:﹋少年つ
链接:https://leetcode.cn/problems/sliding-window-maximum/solutions/3800920/jin-ri-da-qia-jia-you-by-2174854139-bs3g/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

76. 最小覆盖子串 - 力扣(LeetCode)

复制代码
class Solution {
     public String minWindow(String s, String t) {
        //特殊情况进行判断
        if (s==null||s.isEmpty()||t.isEmpty()||t==null){
            return "";
        }
        //记录t的大小和次数
        Map<Character,Integer> need=new HashMap<>();
        //记录窗口的大小和次数
        Map<Character,Integer> window=new HashMap<>();
        int left=0,right=0; //左右指针
        int  strnumber=0; //匹配的个数
        int   minlen=Integer.MAX_VALUE;  //最小长度
        int   start=0; //最短起始指针
        //进行t的初始化
        for(char c:t.toCharArray()) {
            need.put(c,need.getOrDefault(c,0)+1);
        }
        while(right<s.length()){
            char r=s.charAt(right);
            right++;
            //更新窗口内字符的计数
            if(need.containsKey(r)){
                window.put(r, window.getOrDefault(r,0)+1);
                if (need.get(r).equals(window.get(r))) {
                    strnumber++;
                }
            }
            //当窗口内的字符已经完全包含了 t 中的所有字符时
            while (strnumber==need.size()){
                // 更新最小窗口的起始位置和长度
                if (right-left<minlen){
                   start=left;
                   minlen=right-left;
                }
                  // 缩小窗口,移动左边界
                char l=s.charAt(left);
                if (window.containsKey(l)){
                    window.put(l,window.get(l)-1);
                    if (window.get(l)<need.get(l)) {
                        strnumber--;
                    }
                }
                left++;
            }

        }
        return  minlen==Integer.MAX_VALUE? "": s.substring(start,start+minlen);
    }
}
相关推荐
hahaha60166 分钟前
HLS高层次综合设计技巧--循环merge和循环split
人工智能·算法·计算机视觉
JAI科研7 分钟前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
positive_zpc18 分钟前
进阶数据结构图——关键路径(四)
数据结构·图论·关键路径
集思广益的灰太狼24 分钟前
变频器启动致PLC数据异常?西门子G120配合滤波器EMC抑制方案
人工智能·算法·工控·emc·电磁兼容·变频器·西门子
孙克旭_34 分钟前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表
方方洛39 分钟前
vllm教程-03-架构设计
算法·架构
玄昌盛不会编程41 分钟前
LeetCode——2091. 从数组中移除最大值和最小值
java·算法·leetcode
如何取名1 小时前
结合实际业务进行LRU淘汰算法优化设计(数据库开发日志)
数据库·算法
aichitang20241 小时前
快乐泛函每一天:希尔伯特空间中的最佳逼近与正交投影定理
人工智能·考研·算法·ai·面试·泛函分析
淬炼之火1 小时前
笔记:Visually-Guided Policy Optimization for Multimodal Reasoning
人工智能·笔记·算法·机器学习·语言模型·自然语言处理