首页 > 其他分享 >239. 滑动窗口最大值(困难)

239. 滑动窗口最大值(困难)

时间:2024-04-01 16:56:57浏览次数:22  
标签:pre nums int res 最大值 st 239 new 滑动

核心思想
主要包含两个动作

nums[i]进 和 nums[i-k]
新元素进入窗口旧元素移出窗口
最大值是谁这个区间各个元素都有可能
所以用一个set记录窗口的值,自定义排序从大到小,每次拿第一个就是最大值
同时用map记录数字出现次数,为0则移出set。

代码

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        TreeSet<Integer> st = new TreeSet<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });
        HashMap<Integer,Integer> v = new HashMap<>();
        int[] res = new int[nums.length - k + 1];
        int resInd = 0;
        for(int i = 0; i < k; i++){
            st.add(nums[i]);
            v.put(nums[i], v.getOrDefault(nums[i], 0) + 1);
        }
        res[resInd++] = st.first();
        for(int i = k; i < nums.length; i++){
            int pre = nums[i - k];
            v.put(pre, v.get(pre) - 1);
            if(v.get(pre) == 0){
                v.remove(pre);
                st.remove(pre);
            }

            v.put(nums[i], v.getOrDefault(nums[i], 0) + 1);
            st.add(nums[i]);

            res[resInd++] = st.first();

        }
        return res;
    }
}

标签:pre,nums,int,res,最大值,st,239,new,滑动
From: https://www.cnblogs.com/ganyq/p/18108851

相关文章

  • 13天【代码随想录算法训练营34期】 第五章 栈与队列part03(● 239. 滑动窗口最大值 ●
    239.滑动窗口最大值单调队列:单调递减,一个queue,最大值在queue口,队列中只维护有可能为最大值的数字比如说1,3,2,4;当slidingwindow已经到3时,就可以把1pop出去了,因为有了3,1不可能为最大值,同理到4的时候,3、2都可以pop出去classMyQueue:def__init__(self):self.queue......
  • 八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制)
    引言TCP巨复杂!同时在八股计算机网络中也经常被问到,必须会!这篇文章将让小白有个大体框架,知道怎么个事,面试中可以有话说,也能让佬更加巩固知识点。TCP是一个可靠的传输协议,为了保证它的可靠性,出现七七八八的机制,它可能有数据的破坏、丢包、重复以及分片顺序混乱等问题,TCP通过序......
  • 滑动窗口算法(Sliding Window Algorithm)
    滑动窗口的核心就是,右指针给窗口扩容,直至抵达扩容限制条件或抵达边界;左指针则是给窗口缩容,以释放限制条件的约束,保证窗口继续向边界移动。需求讲解给定一个字符串str,请找出其中不含有重复字符的最长子串的长度。publicstaticintlengthOfLongestSubstring(Stringstr){......
  • Android RecyclerView 滑动后选中的条目居中显示
    话不多说先看效果:实录效果视频如下滚动居中RecyclerView在原有的RecyclerView基础上操作,其他步骤不变,只是替换一下manager步骤导入依赖maven{url'https://www.jitpack.io'}//无限滚动implementation'com.github.ZhaoChanghu:Galler......
  • SAP HCM PT limit时间类型最大值
    这几天一直在考勤核算,但是日出勤小时大于排班小时(无加班情况),里面的原因就不详细说明,只能事后弥补(前面代码逻辑实在不想看,调整还不知道会有什么其他的问题),开始想自己写个规则处理下,但是看到别人写的一大堆规则,不想祸害后面的人,还是标准功能能搞定的就不写自定义规则,后面看......
  • 代码随想录 Day3 数组 | LC977 有序数组的平方 & LC209 长度最小的子数组(滑动窗口))
    四、有序数组的平方题目:力扣977:有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[......
  • 代码随想录刷题记录4——滑动窗口和螺旋矩阵
    数组:701.二分查找27.移除元素977.有序数组的平方209.长度最小的子数组59.螺旋矩阵思路:209.长度最小的子数组只要知道要用滑动窗口的思路来写就好了!滑动窗口本质上就是双指针核心问题是考虑好窗口什么时候变大什么时候变小59.螺旋矩阵并没有什么新的算法思想,但......
  • 【模板】单调队列 滑动窗口最值
    LuoguP1886滑动队列/单调队列有一个长为 n 的序列 a,以及一个大小为 k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 以求最小值为例f[i]表示以i结尾的窗口中的最小值f[i]=min(a[j]),i-k+1<=j<=i暴力算法O(n^2)......
  • Android11.0 SystemUI 下拉通知栏去掉左右滑动通知菜单功能
    1.前言在11.0的系统rom产品定制化开发中,在systemui模块中关于下拉状态栏这块也是非常重要的部分,最近在关于systemui下拉通知栏的每条通知部分要求去掉通知栏通知的长按事件,不需要长按功能,所以就需要分析下关于长按事件是在哪里注册的,然后去掉就可以了,接下来分析实现相关功能......
  • uni-app 滑动翻页
    <template><viewclass="contain-box"><u-navbar:title="title":is-back="true"back-icon-color="#fff":background="background":border-bottom="false&......