C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目

题目链接:2799. 统计完全子数组的数目(中等)

算法原理:

解法:滑动窗口

击败56.50%

时间复杂度O(N)

跟模板题大差不差👇

C.滑动窗口-求子数组个数-越长越合法------1358. 包含所有三种字符的子字符串数目(模板)

①先统计出目标数目:整个数组中不同元素的数目

②进窗口:哈希表中对应值次数+1;

③出窗口:只要键的数目=目标数目就持续出窗口,使left处于恰好不满足的状态

④更新:ret+=left,含义就是枚举每个右端点时,不同的左端点的数目就是能够使窗口内不同元素数目等于整个数组中不同元素的数目的数目

Java代码:

java 复制代码
class Solution {
    public int countCompleteSubarrays(int[] nums) {
        int n=nums.length;
        //统计整个数组不同元素的个数
        Set<Integer> set=new HashSet<>();
        for(int x:nums) set.add(x);
        //统计<数,出现次数>
        Map<Integer,Integer> hash=new HashMap<>();
        int left=0,ret=0;
        for(int x:nums){
            //进窗口
            hash.put(x,hash.getOrDefault(x,0)+1);
            //出窗口
            while(hash.keySet().size()==set.size()){
                hash.put(nums[left],hash.get(nums[left])-1);
                if(hash.get(nums[left])==0) hash.remove(nums[left]);
                left++;
            }
            //更新
            ret+=left;
        }
        return ret;
    }
}
相关推荐
NAGNIP9 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
程序员清风15 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林55116 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
颜酱17 小时前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub20 小时前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub20 小时前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub20 小时前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub21 小时前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub21 小时前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
祈安_21 小时前
C语言内存函数
c语言·后端