滑动窗口刷题(二)

目录

1.最大连续1的个数 III

1.题目解析

2.算法原理

2.1暴力枚举(不过多介绍)

2.2双指针优化

3.代码编写

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

1.题目解析

2.算法原理

2.1滑动窗口

3.代码编写

3. 水果成篮

1.题目解析

2.算法思路

2.1滑动窗口+哈希表


1.最大连续1的个数 III

1.题目解析

2.算法原理

2.1暴力枚举(不过多介绍)

int longestOnes(vector<int>& nums, int k) {
        int n = nums.size();
        int ret = 0;
        for(int i = 0; i<n; i++)
        {
            int t = k;
            int cnt = 0;
            for(int j = i; j<n; j++)
            {
                if(nums[j] == 1)
                {
                    cnt++;
                }
                else if(nums[j] == 0)
                {
                    t--;
                    if(t < 0)
                    {
                       break; 
                    }
                    cnt++;
                }
                ret = max(ret,j-i+1);

            }
        }
        return ret; 
}

2.2双指针优化

在暴力解法中发现,两个指针是同向一起向后走,考虑双指针优化。

将问题转化为维护一个区间,区间内部的0的个数不能超过k。求最长的区间。

进窗口:遍历数组如果nums[right] == 0,计数器cnt--

判断:区间内0的个数是否超过k

出窗口:left++直到区间内0的个数小于k

3.代码编写

 int longestOnes(vector<int>& nums, int k) {
        int left = 0,right = 0;
        int ret = 0, cnt = 0;
        while(right < nums.size())
        {
            if(nums[right] == 0)
            {
                cnt++;
            }

            while(cnt > k)
            {   
                if(nums[left] == 0)
                {
                    cnt--;
                }
                left++; 
            }
            ret = max(ret,right - left +1);
            right++;
        }
        return ret;
    }

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

1.题目解析

这道乍一看,左边减一次,右边见一次很不好处理,这个时候用逆向思维可以很好解决问题。

让操作次数最短,就是让左右两边的和为x长度加起来最短,转换一下,让中间部分和为sum-x最长(sum为整个数组的和)。

求和为sum-x的最长子数组

2.算法原理

2.1滑动窗口

求数组整体的和sum

进窗口:遍历数组cnt += nums[right]

判断:cnt的值是否大于target

出窗口:cnt -= nums[left]

3.代码编写

int minOperations(vector<int>& nums, int x) {
        int sum = 0;
        for(int i : nums)
        {
            sum += i;
        }
        int target = sum - x;
        int  n = nums.size();
        if(target < 0)return -1;
        int cnt = 0;
        int ret = -1;
        for(int left = 0,right = 0; right < nums.size(); right++)
        {
            cnt += nums[right];
            while(cnt > target)
            {
                cnt -= nums[left];
                left++;
            }
            if(cnt == target)
            ret = max(ret,right-left+1);
        }
        return ret == -1 ? -1 : n -ret ;
    }

3.最大连续1的个数 III

1.题目解析

说了一大堆翻译成人话就是

求数字种类不超过2种的最长子数组。(1,2就是不同的水果种类)

2.算法思路

2.1滑动窗口+哈希表

进窗口:进哈希表,数字种类++。

判断:哈希表的大小是否大于2

出窗口:将left指针指向的元素,在哈希表中数字种类--,减为0之后删除,直到哈希表的大小小于2。

int totalFruit(vector<int>& fruits) {
    //找一个最长连续的子数组,子数组内的类型不能超过2种
    unordered_map<int,int> hash;
    int ret = 0;
    int left = 0, right = 0;
    while(right < fruits.size())
    {   
        hash[fruits[right]]++;//进窗口
        while(hash.size() > 2)//判断
        { 
             hash[fruits[left]]--;//出窗口
             if(hash[fruits[left]] == 0)
             {
                 hash.erase(fruits[left]);
             }
             left++;
        }
        ret = max(ret,right-left+1);
        right++;
    }
    return ret;
    }

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

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

相关文章

关于电脑功耗与电费消耗的问题,你了解多少?

一台电脑24小时运行需要多少电量&#xff1f; 大家好&#xff0c;我是一名拥有多年维修经验的上门维修师傅。 今天我就来回答大家关于电脑24小时运行需要多少电量的问题。 电脑功耗及用电量 首先我们来看看电脑的功耗情况。 普通台式电脑的功耗通常在300瓦左右&#xff0c;即…

《The Art of InnoDB》第二部分|第4章:深入结构-磁盘结构-redo log

4.3 redo log 目录 4.3 redo log 4.3.1 redo log 介绍 4.3.2 redo log 的作用 4.3.3 redo log file 结构 4.3.4 redo log 提交逻辑 4.3.5 redo log 持久化逻辑 4.3.6 redo log 检查点 4.3.7 小结 未完待续.... 上文我们学习了表空间&#xff0c;下面我们来介绍日志系统…

vue从flask获取数据并显示

记录一个前后端分离遇到的问题&#xff0c;即vue前端从flask后端获取数据。具体描述如下&#xff1a;flask只负责连接数据库并获取数据库的数据&#xff0c;并返回给前端vue&#xff1b;vue则需要获取后端返回的数据并显示。 方法如下&#xff0c;分别用一个vue组件和一个flas…

torch.nn.embedding的介绍和用法

nn.Embedding 是 PyTorch 中的一个神经网络层&#xff0c;它主要用于将离散的、高维的数据&#xff08;如词索引&#xff09;转换为连续的、低维的空间中的稠密向量表示。在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;这个层通常用于实现词嵌入&#xff08;Word Em…

ES6内置对象 - Map

Map&#xff08;Map对象保存键值对&#xff0c;键值均不限制类型&#xff09; 特点&#xff1a; 有序&#xff08;Set集合是无序的&#xff09;&#xff1b;键值对&#xff08;键可以是任意类型&#xff09;&#xff1b;键名不能重复&#xff08;如果重复&#xff0c;则覆盖&…

自考《计算机网络原理》考前冲刺

常考选择填空 1、计算机网络的定义&#xff1a;计算机网络是互连的、自治的计算机的集合。 2、协议的定义&#xff1a;协议是网络通信实体之间在数据交换过程中需要遵循的规则或约定 3、协议的3个要素 (1) 语法&#xff1a;定义实体之间交换信息的格式与结构&#xff0c;或…

经典Go知识点总结

开篇推荐 来来来,老铁们,男人女人都需要的技术活 拿去不谢:远程调试,发布网站到公网演示,远程访问内网服务,游戏联机 推荐链接 1.无论sync.Mutex还是其衍生品都会提示不能复制,但是能够编译运行 加锁后复制变量&#xff0c;会将锁的状态也复制&#xff0c;所以 mu1 其实是已…

Docker Container(容器)

"在哪里走散&#xff0c;你都会找到我~" Docker 容器 什么是容器&#xff1f; 通俗来讲&#xff0c;容器是镜像运行的实体。我们对于镜像的认知是&#xff0c;“存储在磁盘上的只读文件”。当我们启动一个容器的本质&#xff0c;就是启动一个进程&#xff0c;即容器…

c语言字符函数和字符串函数

目录 1. 字符分类函数2. 字符转换函数3. strlen的使用和模拟实现4. strcpy的使用和模拟实现5. strcat的使用和模拟实现6. strcmp的使用和模拟实现7. strncpy函数的使用8. strncat函数的使用9. strncmp函数的使用10. strstr的使用和模拟实现11. strtok函数的使用12. strerror函数…

【kubernetes】二进制部署k8s集群之master节点和etcd数据库集群(上)

目录 前言&#xff1a;关于整个k8s集群的主机规划以及本文部署架构 步骤一&#xff1a;完成操作系统初始化配置 步骤二&#xff1a;完成etcd集群部署 关于etcd集群 ①准备签发证书环境 ②先完成单独一个节点的部署 ③通过部署好的etcd01节点 完成另外两个节点的部署 拓展…

大数据之Flink优化

文章目录 导言&#xff1a;Flink调优概览第1章 资源配置调优1.1 内存设置1.1.1 TaskManager 内存模型1.1.2 生产资源配置示例 1.2 合理利用 cpu 资源1.2.1 使用 DefaultResourceCalculator 策略1.2.2 使用 DominantResourceCalculator 策略1.2.3 使用DominantResourceCalculato…

《隐私计算简易速速上手小册》第8章:隐私计算对机器学习和 AI 的影响(2024 最新版)

文章目录 8.1 机器学习中的隐私问题8.1.1 基础知识8.1.2 主要案例:使用差分隐私的机器学习8.1.3 拓展案例 1:基于隐私的数据聚合8.1.4 拓展案例 2:保护隐私的推荐系统8.2 使用隐私计算加强 AI 安全8.2.1 基础知识8.2.2 主要案例:使用同态加密的数据分析8.2.3 拓展案例 1:安…

什么是调制比

一般情况下&#xff0c;调制波和载波的最大幅值是不一样的。 正弦波的最大幅值低于三角波的最大幅值。 这样做的目的就是产生最大占空比&#xff08;2000W逆变器中最大占空比是80%&#xff09; 调制波就是正弦波的最大幅值比三角载波的最大幅值 问题1 为什么调制波要小于1&…

pdffactory pro 8中文破解版

详细介绍 PdfFactory&#xff0c;PDF文档虚拟打印机&#xff0c;无须Acrobat即可创建Adobe PDF文件&#xff0c;创建PDF文件的方法比其他方法更方便和高效。支持将多个文档整合到一个PDF文件、增加字体和便签、PDF加密、去水印、压缩优化。 FinePrint&#xff0c;Windows虚拟…

SpringBoot 3 新特性

目录 1. GraalVM2. 支持虚拟线程3. HTTP Interface 1. GraalVM 使用GraalVM将SpringBoot应用程序编译成本地可执行的镜像文件&#xff0c;可以显著提升启动速度、峰值性能以及减少内存应用。传统的应用都是编译成字节码&#xff0c;然后通过JVM解释并最终编译成机器码来运行&a…

2.23作业

1.自己实现单向循环链表的功能 //loop_list.c#include"loop_list.h" //创建单向循环链表 loop_p create_head() {loop_p H(loop_p)malloc(sizeof(loop_list));if(HNULL){printf("空间申请失败\n");return NULL;}H->len0;H->nextH;return H; }//创建…

【前端素材】推荐优质后台管理系统Follow平台模板(附源码)

一、需求分析 当我们从多个层次来详细分析后台管理系统时&#xff0c;可以将其功能和定义进一步细分&#xff0c;以便更好地理解其在不同方面的作用和实际运作。 1. 结构层次 在结构层次上&#xff0c;后台管理系统可以分为以下几个部分&#xff1a; a. 核心功能模块&#…

计算机组成原理

为什么你需要学习计算机组成原理&#xff1f; 计算机底层知识的“第一课” 其实在看完各个大学的计算机课程设计之后。&#xff0c;你会发现&#xff0c;它们都有差不多十来门核心课程。其中&#xff0c;“计算机组成原理”是入门和底层层面的第一课。 虽然计算机系的学生毕业后…

基于自然语言的跨模态行人重识别技术研究

基于自然语言的跨模态行人重识别技术研究万方数据知识服务平台 第二章 跨模态行人重识别理论基础 2.1 文本-图像检索技术 基于文本信息的跨模态行人重识别本质是基于文本-图像两个模态的行人重识别&#xff0c; 由于跨的两个模态分别是文本和图像&#xff0c; 所以其解决思路…

WordPress前端如何使用跟后台一样的Dashicons图标字体?

很多站长都喜欢在站点菜单或其他地方添加一些图标字体&#xff0c;常用的就是添加Font Awesome 图标和阿里巴巴矢量库图标iconfont。其实我们使用的 WordPress 本身就有一套管理员使用的官方图标字体 Dashicons&#xff0c;登录我们站点后台就能看到这些图标字体。那么有没有可…