滑动窗口算法(1)

目录

基本概念

209.长度最小的子数组

一、题目描述

二、思路解析

三、代码

3.无重复字符的最长子串

一、题目描述

二、思路解析

三、代码

 1004.最大连续1的个数

一、题目描述

二、思路解析

三、代码

1658.将x减到0的最小操作数 

一、题目描述

二、思路解析

三、代码


基本概念

若问题分析的对象是[一段连续的区间],我们就可以考虑使用[滑动窗口]解决问题。
滑动窗口其实就是两个同向的指针,不停地有数据进入这两个指针的区间,也不停地有数据要退出这个区间,这个区间在整个数组中来回滑动,故名[滑动窗口]。

209.长度最小的子数组

一、题目描述

OJ题目链接:力扣(LeetCode)

二、思路解析


三、代码

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) 
    {
        int left = 0;
        int right = left;
        int min_len = nums.size();//长度最小的连续子数组的长度
        int sum = 0;
        while(right < nums.size())
        {  
            sum += nums[right];
            while(sum >= target)
            {
                int len = right - left + 1;//左右区间长度
                min_len = min(min_len, len);//实时更新
                sum -= nums[left];
                left++;
            }
            right++;
        }
        if(right - left == nums.size())//当所以sum均不满足target时
        {
            return 0;
        }
        else
            return min_len;
    }
};

3.无重复字符的最长子串

一、题目描述

OJ题目链接:力扣(LeetCode)

二、思路解析


三、代码

//暴力法比对元素
class Solution {
public:
    int lengthOfLongestSubstring(string s) 
    {
        int left = 0;
        int right = 0;
        int max_len = 0;
        while(right < s.size())
        {
            int tmp = left;
            while(tmp < right)
            {
                if(s[tmp] == s[right])
                    break;
                tmp++;//1.如果提前退出,那么tmp != right
                      //2.tmp可以记录区间中与s[r]相同元素的位置
            }
            if(tmp == right)//如果区间中没有相同元素,后侧元素入窗口
                right++;
            else//如果区间中有相同元素,出窗口——直接修改left的值
                left = tmp + 1;
            max_len = max(max_len, right - left);
        }
        return max_len;
    }
};
//哈希表记录法
class Solution {
public:
    int lengthOfLongestSubstring(string s) 
    {
        int hash[128] = {0};
        int left = 0, right = 0, max_len = 0;
        while(right < s.size())
        {
            hash[s[right]]++;//进窗口
            while(hash[s[right]] > 1)//判断
                {
                    hash[s[left]]--;//出窗口
                    left++;
                }
            max_len = max(max_len, right - left + 1);//更新
            right++;
        }
        return max_len;
    }
};

 1004.最大连续1的个数

一、题目描述

即找有最长1的区间,该区间0的个数不超过k个。

OJ题目链接:力扣(LeetCode)

二、思路解析


三、代码

class Solution {
public:
    int longestOnes(vector<int>& nums, int k) 
    {
        int cnt = 0, max_len = 0;
        for(int left = 0, right = 0; right < nums.size(); right++)
        {
            if(nums[right] == 0) cnt++;//进窗口
            while(cnt > k) //判断
            {
                if(nums[left] == 0) cnt--;//出窗口
                left++;
            }
            max_len = max(max_len, right - left + 1);//更新
        }
        return max_len;
    }
};

1658.将x减到0的最小操作数 

一、题目描述

OJ题目链接:力扣(LeetCode)

二、思路解析

这道题目我们可以换个角度理解:

这样一看,我们的题目就变成了在数组中找到和为 sum - x 的最长连续子数组!

三、代码

class Solution {
public:
    int minOperations(vector<int>& nums, int x) 
    {
        int left = 0, right = 0, remainder_n = INT_MAX, sum = 0, n = nums.size();
        for(int i = 0; i < nums.size(); i++)
        {
            sum += nums[i];//计算数组所有元素之和
        }
        int remainder = sum - x;//计算剩余元素之和
        if(remainder < 0) return -1;//特殊情况判断
        int tmp_sum = 0;
        for(; right < nums.size(); right++)
        {
            tmp_sum += nums[right];//进窗口   
            while(tmp_sum > remainder) //判断
            {
                tmp_sum -= nums[left];//出窗口
                left++;
            }
            if(tmp_sum == remainder)//更新结果
                remainder_n = min(remainder_n, n - (right - left + 1));
        }
        return remainder_n == INT_MAX ? -1 : remainder_n; 
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JSP-内置对象

Out对象 作用&#xff1a;用来给页面输出数据。 主要方法&#xff1a; Print(string) </br>换行 Println(string) 方法同上 <%page language"java" contentType"text/html;charsetUTF-8"%> <html><head><title>test.…

基于深度学习的图像去雨去雾

基于深度学习的图像去雨去雾 文末附有源码下载地址 b站视频地址&#xff1a; https://www.bilibili.com/video/BV1Jr421p7cT/ 基于深度学习的图像去雨去雾&#xff0c;使用的网络为unet&#xff0c; 网络代码&#xff1a; import torch import torch.nn as nn from torchsumm…

Prompt提示工程上手指南:基础原理及实践(二)-Prompt主流策略

前言 上篇文章将Prompt提示工程大体概念和具体工作流程阐述清楚了&#xff0c;我们知道Prompt工程是指人们向生成性人工智能&#xff08;AI&#xff09;服务输入提示以生成文本或图像的过程中&#xff0c;对这些提示进行精炼的过程。生成人工智能是一个根据人类和机器产生的数…

【Python】使用plt库绘制动态曲线图,并导出为GIF或MP4

一、绘制初始图像 正常使用plt进行绘图&#xff0c;这里举例一个正弦函数&#xff1a; 二、绘制动态图的每一帧 思路&#xff1a; 根据横坐标点数绘制每一帧画面每次在当前坐标处&#xff0c;绘制一个点和垂直的线&#xff0c;来表示当前点可以在点上加个坐标等样式来增加…

Gut Microbes | 新生儿微生物组研究的方法学挑战

摘要 新生儿出生后&#xff0c;肠道菌群的定植对新生儿的健康发育起着至关重要的作用&#xff0c;并影响其日后的健康和疾病。了解新生儿肠道菌群的发育以及其与新生儿宿主的相互作用是一个重要的研究领域。然而&#xff0c;该领域的研究必须解决影响研究方法设计和实施的一系…

【Java系列】OOM 时,JVM 堆栈信息保存和分析

一、前言 在日常开发中&#xff0c;即使代码写得再谨慎&#xff0c;免不了还是会发生各种意外的事件&#xff0c;比如服务器内存突然飙高&#xff0c;又或者发生内存溢出(OOM)。当发生这种情况时&#xff0c;我们怎么去排查&#xff0c;怎么去分析原因呢&#xff1f; 一般遇到…

展厅设计中灯光的要点都是什么

1、白炽灯 白炽灯也就是普通普通白炽灯泡白炽灯有显色性强&#xff0c;开灯即亮&#xff0c;明暗可调&#xff0c;结构简单&#xff0c;造价低等优点&#xff0c;但缺点是使用寿命短&#xff0c;光效较低展厅设计中常使用于走道和其他部位。 2、卤钨灯 充气白炽灯填充气体中含有…

代码随想录day20(1)二叉树:二叉树的最小深度(leetcode111)

题目要求&#xff1a;求出一棵二叉树的最小深度 思路&#xff1a;最小深度指的是从根节点到最近叶子节点的最短路径上的节点数量&#xff08;左右孩子必须都为空&#xff01;&#xff09;。思路类似于求二叉树的最大深度&#xff0c;仍然采用后序遍历&#xff0c;增加判断只有…

Docker启动安装nacos(踩过坑版)

1、Docker 拉取镜像 docker pull nacos/nacos-server:v2.1.0 2、创建宿主机挂载目录 mkdir -p /mydata/nacos/logs/ mkdir -p /mydata/nacos/conf/ 3、启动nacos并复制文件到宿主机&#xff0c;关闭容器 启动容器 docker run -p 8848:8848 --name nacos -d nacos/nacos-se…

通过Maven创建Web工程

通过Maven创建Web工程 方式一方式二 方式一 1.先创建一个Maven工程 2.把该Maven模块的pom文件里添加一个war 3.选中该Maven模块 点击项目架构 4.手动添加一个Web架构 方式二 1.也是new一个模块 但是直接配置好Web 2.这里就是我IDEA对Maven的设置 3.第一次创建 可能…

【C++】STL--String

这一节主要总结string类的常见接口&#xff0c;以及完成了string类的模拟实现。 目录 标准库的String类 string类常见接口 string类对象的常见构造 string析构函数&#xff1a;~string string类对象的容量操作 string类对象的访问及遍历操作 string类对象的修改操作 s…

jvm题库详解

1、JVM内存模型 注意&#xff1a;这个是基于jdk1.8之前的虚拟机&#xff0c;在jdk1.8后 已经没有方法区&#xff0c;一并合并到堆中的元空间了 JVM内存区域总共分为两种类型 线程私有区域&#xff1a;程序计数器、本地方法栈和虚拟机栈 线程共享区域&#xff1a;堆&#xff08…

让若依生成的service、mapper继承mybatisPlus的基类

前言&#xff1a;若依继承mybatisPlus后&#xff0c;生成代码都要手动去service、serviceImpl、mapper文件去继承mybatisplus的基类&#xff0c;繁琐死了。这里通过修改若依生成模版从而达到生成文件后直接使用mybatisPlus的方法。 一、首先找到若依生成模版文件位置&#xff…

顶顶通呼叫中心中间件-群集模式配置

文章目录 群集模式介绍联系我们配置流程群集模式下呼叫线路配置 群集模式介绍 在大规模的外呼或者呼入系统&#xff0c;比如整个系统需要1万并发&#xff0c;单机最高也就3000-5000并发&#xff0c;这时候就需要多机群集了。顶顶通呼叫中心中间件使用的是 redis 数据库&#x…

你选的Six Sigma咨询公司靠谱吗?保姆级避坑指南

近年来&#xff0c;企业为了追求更高的运营效率和产品质量&#xff0c;纷纷寻求Six Sigma这样的先进管理方法。然而&#xff0c;市场上的咨询公司琳琅满目&#xff0c;如何选择一家真正靠谱、能带来实际效益的咨询公司呢&#xff1f; 一、了解公司背景和实力 在选择Six Sigma咨…

msdn我告诉你itellyou做一个安静的工具站,各种windows镜像下载,iso体积都是很小的那种

官网地址&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 可以看到里面集成了各种操作系统&#xff0c;可以下载使用。 或者在他的新站点&#xff1a;登录 里面有最新的windows11系统可以下载&#xff0c;但是需要登陆之后才可以&#xff0c;随便第三方账号登陆即可&…

【Devin AI】全球首位AI程序员登场,程序员该如何保住饭碗?编程新纪元的革命已到来!

程序员们&#xff0c;警惕&#xff01;我们的饭碗要被砸了&#xff01; 一觉醒来&#xff0c;全球首位AI程序员 Devin 上线了&#xff01;直接引爆整个科技圈。 Devin被介绍为世界首个完全自主的AI软件工程师。只需一句指令&#xff0c;它可端到端地构建和部署整个开发项目。 …

Ajax学习笔记(一):原生AJAX、HTTP协议、AJAX案例准备工作、发送AJAX请求、AJAX 请求状态

目录 一、原生AJAX 1.1AJAX 简介 1.2 XML 简介 1.3 AJAX的特点 二、HTTP协议 三、AJAX案例准备工作 四、发送AJAX请求 1.发送GET请求 2.发送POST请求 3.JSON响应 IE缓存问题&#xff1a; 五、AJAX 请求状态 一、原生AJAX 1.1AJAX 简介 AJAX 全称为 Asynchronous …

使用Nginx进行负载均衡

什么是负载均衡 Nginx是一个高性能的开源反向代理服务器&#xff0c;也可以用作负载均衡器。通过Nginx的负载均衡功能&#xff0c;可以将流量分发到多台后端服务器上&#xff0c;实现负载均衡&#xff0c;提高系统的性能、可用性和稳定性。 如下图所示&#xff1a; Nginx负…

shell控制多线程并发处理

一、前言 我们在用shell编程时&#xff0c;当用到循环语句时&#xff0c;如果循环的对象数量比较多&#xff0c;则代码一条一条处理&#xff0c;时间消耗会特别慢。如果此时机器资源充足&#xff0c;不妨学会多线程并发处理这招&#xff0c;帮助你提前打卡完成工作。 二、控制…
最新文章