Leetcode 209,713,3 滑动窗口 C++实现

news2024/11/16 11:43:32

Leetcode 209. 长度最小的子数组

问题:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0

算法:滑动窗口,左右两个指针,从最左边开始遍历,右指针 right 右移,当子数组的和 sum 满足条件(>= target)时记录长度存入 ans ,然后左指针 left 右移寻找下一个符合条件的子数组。

代码:

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int n = nums.size(),left = 0,sum = 0,ans = n + 1;
        for(int right = 0;right< n;right++){
            sum += nums[right];//+右面的
            while(sum >= target){
                ans = min(ans,(right - left + 1));//满足条件,存储长度
                sum -= nums[left++];//左指针右移继续找下一个
            }
        }
        return ans <= n ? ans:0;
    }
};

Leetcode 713. 乘积小于 K 的子数组

问题:给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 连续子数组的数目。

算法:滑动窗口,从左边开始,慢慢将右指针 right 右移,满足条件则计入总数(以满足条件时的右指针为准),若 [ l , r ] 满足条件,则 [ l + 1 , r ] , [ l + 2 , r ] ... 一直到 [ r , r ] 都符合条件,则计算出公式 right - left + 1 。

代码:

class Solution {
public:
    int numSubarrayProductLessThanK(vector<int>& nums, int k) {
        if(k <= 1)  return 0;
        int left = 0,right = 0,prod = 1,ans = 0;
        for(int right = 0;right < nums.size();right++){
            prod *= nums[right];
            while(prod >= k)    prod /= nums[left++];//不满足条件,左指针右移
            ans += right - left + 1;
        }
        return ans;
    }
};

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

问题:给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。

算法:

 hash 表做法,右指针 right 右移,出现重复元素则让左指针 left 右移,直到将重复元素消除,再更新窗口长度最大值 ans

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int left{},ans{};
        unordered_set<char>window;// 维护从下标 left 到下标 right 的字符
        for(int right = 0;right < s.size();right++){
            char c = s[right];
            // 如果窗口内已经包含 c,那么再加入一个 c 会导致窗口内有重复元素
            // 所以要在加入 c 之前,先移出窗口内的 c
            while(window.count(c)) window.erase(s[left++]); // 缩小窗口
            window.insert(c);// 加入 c
            ans = max(ans,right - left + 1);// 更新窗口长度最大值
        }
        return ans;
    }
};

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

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

相关文章

redis 遍渐进式历

1.scan cursor [match pattern] [coutn] [type]:以渐进式的方式进行建的遍历 cursor:是光标 指向当前遍历的位置 设置成0表示当前从0开始获取 math parttern &#xff1a;和keys命令一样的 keys * count: 限制一次遍历能够获取到多少个 元素默认是10 type :这次遍历只想获取…

数据库原理--关系模型简述

目录 一、关系模型研究什么 二、关系模型的三要素 三、关系模型与关系数据库语言的关系 一、关系模型研究什么 一个关系(relation)就是一个表(Table),关系模型就是处理Table的&#xff0c;它由三个部分组成: 描述DB各种数据的基本结构(Table/Relation)描述Table与Table之间…

Docker安装Redis集群记录

redis集群整体的安装效果 备注&#xff1a;本机docker容器的宿主机ip为192.168.0.200&#xff0c;下面的配置全部基于当前IP进行配置&#xff1b; 1 docker镜像下载使用的国内地址 vi /etc/docker/daemon.json{"registry-mirrors": ["https://ustc-edu-cn.mir…

苹果手机怎么还原删除的照片?4个【独门秘籍】都在这里了

苹果手机的拍照功能深受广大用户的喜爱&#xff0c;大家出行旅游也大都选择苹果手机拍照记录&#xff0c;因此手机相册也就成为用户们的【生活回忆录】。但是&#xff0c;我们总是会因为各种各样的原因导致相册里的照片消失不见&#xff0c;对此&#xff0c;我们要怎么还原删除…

《计算机组成原理》(第3版)课后习题答案

第1篇 概 论 1&#xff0e;什么是计算机系统、计算机硬件和计算机软件&#xff1f;硬件和软件哪个更重要&#xff1f; 答&#xff1a;计算机系统&#xff1a;由计算机硬件和软件两部分组成&#xff0c;计算机系统具有接收和存储信息、按程序快速计算和判断并输出处理结果等功…

武汉流星汇聚:亚马逊迎来中国力量,中国卖家推动跨境电商繁荣

随着全球化进程的加速和跨境电商的蓬勃发展&#xff0c;中国卖家正以前所未有的速度和规模涌入亚马逊这一全球领先的电商平台。他们的入驻不仅为亚马逊平台注入了新的活力与多样性&#xff0c;更在全球范围内产生了深远的积极影响与变革。 中国作为世界工厂&#xff0c;拥有庞…

一段式端到端vs两段式端到端,到底哪个好

在智能汽车领域&#xff0c;端到端自动驾驶技术正迅速成为行业焦点&#xff0c;不同的玩家实现路径也有差别。目前主流的端到端智驾方案有两类&#xff1a;一段式和两段式&#xff0c;针对这两种方案优缺点的讨论&#xff0c;也从未停止过。 “两段式”端到端和“一段式”端到端…

遥感之地理农业分区

在前面的文章有介绍关于中国区域进行分区研究的思路&#xff1a; 中国生态地理区划更新和优化 全国一米全要素分类数据集如何得到的&#xff1f;原文赏析&#xff01; 根据不同的研究角度对中国区域进行分区&#xff0c;其结果只是细节不一样&#xff0c;大部分还是差不多的&a…

基于Django框架的图书管理系统,前台采用Bootstrap框架UI,后台EasyUI框架UI

程序开发软件&#xff1a;Pycharm 数据库&#xff1a;mysql 采用技术&#xff1a; Django(一个MVT框架&#xff0c;类似Java的SSM框架) 人生苦短&#xff0c;我用Python&#xff0c;咱们今天就来分享一个用Python语言开发的基于Django框架的图书管理系统吧。项目前台和后台界…

Python酷库之旅-第三方库Pandas(088)

目录 一、用法精讲 371、pandas.Series.sparse.density属性 371-1、语法 371-2、参数 371-3、功能 371-4、返回值 371-5、说明 371-6、用法 371-6-1、数据准备 371-6-2、代码示例 371-6-3、结果输出 372、pandas.Series.sparse.fill_value属性 372-1、语法 372-2…

麒麟系统离线安装docker

随着CentOS全面停服&#xff0c;国产操作系统会慢慢代替centos系统&#xff0c;在后续的项目中&#xff0c;项目部署的环境都必将是国产操作系统&#xff0c;本文就国产操作系统下如何离线安装docker,做下笔记分享 一、材料准备 1、国产操作系统 麒麟10&#xff0c;arm64v8 2、…

爱心商城系统pf

TOC springboot424爱心商城系统pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&…

k8s上部署rancher

一、什么事rancher Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托管服务提供商的集群&#xff0c;创建节点并安装 Kubernetes&#xff0c;或者导入在任何地方运行的现有 Kubernetes 集…

不小心把回收站的照片删了怎么办?别急,这里有找回方法

在日常的数字生活中&#xff0c;照片无疑是我们记录生活点滴、珍藏美好回忆的重要载体。然而&#xff0c;在整理电脑文件时&#xff0c;一个不小心就可能将珍贵的照片误删&#xff0c;甚至从回收站&#xff08;或称为垃圾箱、废纸篓&#xff09;中彻底清空&#xff0c;让人懊悔…

如何关闭宝塔Linux面板的公网SSL证书?

前言 在安装宝塔Linux面板时&#xff0c;有时会不小心开启了公网SSL证书&#xff0c;导致需要通过HTTPS才能访问面板&#xff0c;如果你希望恢复到HTTP访问&#xff0c;可以通过图形界面和命令行两种方式来关闭SSL证书。本文将详细介绍这两种方法&#xff0c;并帮助你顺利完成…

2-70 基于matlab的三维装载约束下的货物循环取货路径优化模型建立

基于matlab的三维装载约束下的货物循环取货路径优化模型建立。包含文档说明。以配送中心为原点&#xff0c;分派多辆同一规格的货车到n个供应商处取货&#xff0c;最后回到配送中心。要求充分考虑货物车厢中的三维装载位置&#xff0c;确保每个零部件均能成功装载&#xff0c;尽…

AUTOSAR实战干货:NVM模块Block属性配置全解析

AUTOSAR实战干货&#xff1a;NVM模块Block属性配置全解析 前言 本文思维大纲如下&#xff1a; 继小T之前所写到的AUTOSAR NVM模块详细文章《AUTOSAR技术干货&#xff1a;CP NVM介绍与实战经验分享》&#xff0c; 小T今天将基于NVM模块中每个Block的重要属性配置一次性讲解清楚…

第132天:内网安全-横向移动Exchange服务有账户CVE漏洞无账户口令爆破

域控环境0day.org 通过网盘分享的文件&#xff1a;131-0day.org内网域环境镜像文件 链接: https://pan.baidu.com/s/1rf_gHVJSNG8PEsiSr7DFSw?pwdr5jc 提取码: r5jc 给win7设置一张nat网卡&#xff0c;其他各个主机都设置为vm2 案例一&#xff1a; 域横向移动-内网服务-Exchan…

turtle库 多圈文字旋转 代码开源

对文字旋转进行了升级 声明&#xff1a;著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 效果&#xff1a;&#xff08;视频要转GIF懒得弄了就截个图&#xff09; 代码实现&#xff1a; # -*- coding: utf-8 -*- """ Creat…

基于SpringBoot的智慧校园管理系统

系统背景 在当今信息化高速发展的时代背景下&#xff0c;智慧校园管理系统作为教育信息化建设的重要组成部分&#xff0c;正逐步成为提升学校管理水平、优化教育资源配置、促进教育教学创新的关键力量。随着物联网、大数据、云计算、人工智能等先进技术的不断融合与应用&#x…