【算法专题】滑动窗口类

news2024/9/20 13:11:23

                                个人主页:CSDN_小八哥向前冲~

                                 所属专栏:算法基础入门


目录

长度最小的子数组

无重复字符的最长子串

最大连续1的个数

将x减到0的最小操作数

水果成篮

找到字符串中所有字母异位词

最小覆盖字串


长度最小的子数组

题目:【LeetCode】长度最小的子数组

思路:

解法一:暴力枚举,注意,一般不推荐,因为有些题目因为时间效率问题,过不了  oj   !!!

代码:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int n=nums.size(),len=INT_MAX;
        for(int i=0;i<n;i++)
        {
            int sum=0;
            for(int j=i;j<n;j++)
            {
                sum+=nums[j];
                if(sum>=target) len=min(len,j-i+1);
            }
        }
        return len==INT_MAX?0:len;
    }
};

解法二:双指针(滑动窗口)

代码:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
         int sum=0,n=nums.size(),len=INT_MAX;
         for(int left=0,right=0;right<n;right++)
         {
            //进窗口
            sum+=nums[right];
            while(sum>=target)
            {
                len=min(len,right-left+1);
                //出窗口
                sum-=nums[left++];
            }
         }
         return len==INT_MAX?0:len;
    }
};

无重复字符的最长子串

题目:【LeetCode】无重复字符的最长字串

思路:

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int hash[128]={0};
        int n=s.size(),len=0;
        for(int left=0,right=0;right<n;right++)
        {
            hash[s[right]]++;
            while(hash[s[right]]>1)
                hash[s[left++]]--;
            len=max(len,right-left+1);
        }
        return len;
    }
};

最大连续1的个数

题目:【LeetCode】最大连续1的个数

思路:

代码:

class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        int n=nums.size(),len=0;
        for(int left=0,right=0,zero=0;right<n;right++)
        {
            if(nums[right]==0)
                zero++;
            while(zero>k)
            {
                if(nums[left++]==0)
                      zero--;
            }
            len=max(len,right-left+1);
        }
        return len;
    }
};

将x减到0的最小操作数

题目:【LeetCode】将x减到0的最小操作数

思路:

如果直接按照题目说的操作,比较难,不好写代码也不好操作,所以我们可以转化成:

在这个数组里面找最大等于某个数的字串。

代码:

class Solution {
public:
    int minOperations(vector<int>& nums, int x) {
        int sum1=0;
        for(auto& e:nums)
            sum1+=e;
        int n=nums.size(),target=sum1-x,ret=-1;
        //细节
        if(target<0)
            return -1;
        for(int left=0,right=0,sum2=0;right<n;right++)
        {
            sum2+=nums[right];//进窗口
            while(sum2>target)
                sum2-=nums[left++];//出窗口
            if(sum2==target)
            {
                ret=max(ret,right-left+1);
            }
        }
        return ret==-1?ret:n-ret;
    }
};

水果成篮

题目:【LeetCode】水果成篮

思路:

代码:

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int hash[100000]={0};
        int n=fruits.size(),ret=0;
        for(int left=0,right=0,count=0;right<n;right++)
        {
            if(hash[fruits[right]]==0) count++;//记录有效数字
            hash[fruits[right]]++;//进哈希
            while(count>2) //出窗口挪动数据
            {
                hash[fruits[left]]--;
                if(hash[fruits[left]]==0) count--;
                left++;
            }
            ret=max(ret,right-left+1);//更新数据
        }
        return ret;
    }
};

找到字符串中所有字母异位词

题目:【LeetCode】找到字符串中所有字母异位词

思路:

代码:

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> ret;
        int hash1[26]={0};//哈希记录p的
        for(auto& e:p)
            hash1[e-'a']++;
        int len=p.size();
        int hash2[26]={0};
        int n=s.size(),count=0;//count记录有效字母
        for(int left=0,right=0;right<n;right++)
        {
            char in=s[right];
            if(++hash2[in-'a']<=hash1[in-'a']) count++;//进窗口记录count
            if(right-left+1>len)//出窗口
            {
                char out=s[left++];
                if(hash2[out-'a']--<=hash1[out-'a']) count--;
            }
            if(count==len) ret.push_back(left);//记录下标
        }
        return ret;
    }
};

最小覆盖字串

题目:【LeetCode】最小覆盖字串

思路:

代码:

class Solution {
public:
    string minWindow(string s, string t) {
        int hash1[128]={0};
        int kinds=0;
        for(auto& e:t)
            if(hash1[e]++==0) kinds++;
        int hash2[128]={0};
        int minlen=INT_MAX,begin=-1;
        for(int left=0,right=0,count=0;right<s.size();right++)
        {
            char in=s[right];
            if(++hash2[in]==hash1[in]) count++;
            while(count==kinds)
            {
                if(right-left+1<minlen)
                {
                    minlen=right-left+1;
                    begin=left;
                }
                char out=s[left++];
                if(hash2[out]--==hash1[out]) count--;
            }
        }
       if(begin==-1) return "";
       else return s.substr(begin,minlen);
    }
};

这些题目你都会了嘛?我们下期见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python生成432Hz音频

使用 numpy 来生成信号&#xff0c; 使用 matplotlib 可视化信号&#xff0c; 使用 sounddevice 播放声音。 以下生成和播放 432 Hz 的正弦波信号&#xff1a; import numpy as np import sounddevice as sd import matplotlib.pyplot as plt# 生成单音函数 def generate_to…

订单完工数量超过了最大可完工数量

本次完工将造成订单YWS-24070027产出实际完工数量达到了6093.000000000&#xff0c;超过了最大可完工数量5000.000000000 一个成品入库单被它们玩坏了。生产不知道生产了什么。PMC不知道要入库什么。鸡同鸭天天开会之后结果就是单据重复的开立&#xff0c;删除&#xff0c;开立…

C++ TinyWebServer项目总结(5. Linux网络编程基础API)

还是给我的语雀文档打个广告&#xff1a; 《5. C TinyWebServer项目总结&#xff08;5. Linux网络编程基础API&#xff09;》我的文章都是先在语雀里记录的&#xff0c;然后再同步发送到CSDN上&#xff0c;有些格式问题实在是懒得改了&#xff0c;可能会导致大家看的不舒服&…

自行车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化

在当今这个日新月异的数字化时代&#xff0c;制造业正经历着前所未有的变革&#xff0c;自行车制造5G智能工厂工业物联数字孪生平台的兴起&#xff0c;无疑是这场转型浪潮中一股强劲力量。自行车制造5G智能工厂工业物联数字孪生平台的成功应用&#xff0c;不仅仅是技术上的突破…

代码随想录DAY21 - 二叉树 - 08/20

目录 修建二叉搜索树 题干 思路和代码 递归法 迭代法 将有序数组转化为平衡二叉搜索树 题干 思路和代码 递归法 递归优化 迭代法 把二叉搜索树转换为累加树 题干 思路和代码 递归法 迭代法 修建二叉搜索树 题干 题目&#xff1a;给你二叉搜索树的根节点 root …

数据结构【顺序结构二叉树:堆】(1)

​​​​​​​ &#x1f31f;个人主页&#xff1a;落叶 目录 ​ &#x1f525;树的概念与结构​​​​​​​ &#x1f525;树的表⽰ &#x1f525;孩⼦兄弟表⽰法&#xff1a; &#x1f525;树形结构实际运⽤场景 &#x1f525;⼆叉树 &#x1f525;概念与结构 &…

day4JS-数组

1. 什么是数组 数组是值的有序集合。每个值叫做一个元素。每个元素在数组中有一个位置, 以数字表示,称为索引 (有时也称为下标)。数组的元素可以是任何类型。数组索引从 0 开始,数组最大能容纳 4294967295 个元素。 2. 数组的声明与使用 2.1 使用字面量的方式声明数组 语法…

Minio web控制台实现授权管理

启动minio ./minio server /data01/aidacp/apps/minio/data --config-dir /data01/aidacp/apps/minio/conf --address 127.0.0.1:19090 --console-address 127.0.0.1:19091 &WARNING: Detected Linux kernel version older than 4.0.0 release, there are some known pote…

建设项目跟踪与展示系统

这是在翻旧文件时翻到的16年写的一个项目 建设项目跟踪与展示系统 建设方案 一、系统建设目的及意义 建设工程项目进度控制的最终目的是确保建设项目按预定的时间完成。能否在预定的时间内交付使用&#xff0c;直接影响到投资效益。为解决施工组织过程中存在问题&#xff0c;…

PyTorch深度学习实战(25)—— 使用向量化思想解决实际问题

本文将实际应用向量化思想解决深度学习中的几个经典问题,读者可以在这些示例中进一步领悟向量化思想和高级索引思想。 1. Box_IoU Box_IoU是目标检测任务中最基本的评价指标。简单来说,Box_IoU就是模型预测的检测结果框(predicted bbox)与原始标记框(ground truth)之间的…

企业级Nginx源码安装及其实战讲解

一&#xff1a;web服务基础介绍 1.1Web服务介绍 Apache 经典的 Web 服务端 Apache起初由美国的伊利诺伊大学香槟分校的国家超级计算机应用中心开发 目前经历了两大版本分别是1.X和2.X 其可以通过编译安装实现特定的功能 Apache prefork 模型 预派生模式&#xff0c;有一个…

[C++进阶]map和set

一、关联式容器 STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 那什么是关联式容器&#xff1f;它与序列式容器…

2.复杂度分析

2.1 算法效率评估 在算法设计中&#xff0c;我们先后追求以下两个层面的目标。 找到问题解法&#xff1a;算法需要在规定的输入范围内可靠地求得问题的正确解。寻求最优解法&#xff1a;同一个问题可能存在多种解法&#xff0c;我们希望找到尽可能高效的算法。 也就是说&a…

JavaScript_7_练习:随机抽奖案例

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>练习&#xff1a;随机抽奖案例</tit…

做谷歌seo如何选择好的服务器?

做谷歌seo如何选择好的服务器&#xff0c;如果你选择自托管平台&#xff0c;那么服务器的选择就非常关键了&#xff0c;服务器的好与坏影响着你的网站的表现&#xff0c;所以选择服务器要慎重。以下是一些建议&#xff0c;帮你做出明智的选择&#xff1a; 安全性&#xff1a;安…

Python Web框架 Django学习记录:1 项目安装,启动

Windows上学习Django # 创建一个虚拟环境 python -m venv tutorial-env# 激活虚拟环境 tutorial-env\Scripts\activate# 安装Django py -m pip install Django# 查看Django版本 py -m django --version# 使用脚手架创建一个项目 django-admin startproject mysite# 启动项目 cd…

linux出现sql密码被忘记的解决方法

目录 前言正文 前言 此处放置在运维篇章&#xff0c;对应sql的修改密码&#xff0c;推荐阅读&#xff1a;修改sql密码&#xff08;涵盖多个版本&#xff09; 如果补充Sql的基本知识&#xff0c;推荐阅读&#xff1a;Mysql底层原理详细剖析常见面试题&#xff08;全&#xff0…

git本地仓库同步到远程仓库

整个过程分为如下几步&#xff1a; 1、本地仓库的创建 2、远程仓库的创建 3、远程仓库添加key 4、同步本地仓库到远程仓库 1、本地仓库的创建&#xff1a; 使用如下代码创建本地仓库&#xff1a; echo "# test" >> README.md git init git add README.md …

shell脚本的编写规范和变量类型

1.shell的作用 shell是Linux系统中后台运行的一种特殊程序也可以理解 成一种特殊的软件&#xff0c;提供了用户与内核进行 交互操作的 一种接口。(简单的说就是shell把人类的高级语言转换成二进制数据&#xff0c;让机器明白你的指令) 过程&#xff1a;用户发出指令&#xff0c…

图像数据处理19

四、形态学图像处理 4.6 灰度图像的形态学处理 4.6.1灰度图像的腐蚀操作 灰度图像的腐蚀处理会让图像整体变暗&#xff0c;增强较暗的细节&#xff0c;抑制较亮的细节。其有助于分割图像、平滑图像边缘。 import cv2 import numpy as np# 读取图像 image cv2.imread(fu.jp…