算法——滑动窗口之最大连续1的个数、将x减到0的最小操作数、水果成篮

3.最大连续1的个数

题目:. - 力扣(LeetCode)

题目要求的是给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k0 ,则返回 数组中连续 1 的最大个数

按照题目正面去做,还要替换0,很麻烦

反正我们最后要求的是最长子序列

那么我们就用最长子序列的方法来做,把问题转化为求一段最长子序列,其中这个子序列中0的个数不超过K个,那么这个子序列中的0翻转后得到的子序列一定是最长连续1的子序列

那么我们用滑动窗口的题目来做:

(1)进窗口:定义一个计数器来统计当前窗口中0的个数,进窗口时候:如果是0,计数器+1,是1则无视

(2)判断 当前计数器是否大于k,大于则出窗口

(3)出窗口

当right走到如上图所示位置时,就要出窗口,但是出窗口不只是left++这么简单

如果left++,那么left从第二个位置开始走,一开始计数器的值还是大于

k,所以left要一直走,直到计数器的值小于k

题解:

 public int longestOnes(int[] nums, int k) {int n = nums.length;int len = 0;for(int left = 0,right = 0,zero = 0; right < n; right++){if(nums[right] == 0){zero++;}while(zero > k){zero -= 1 - nums[left++];}len = Math.max(len,right - left + 1);}return len;}

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

题目:. - 力扣(LeetCode)

此题从正面去解非常麻烦,因为用左边还是右边去减是无法判断的

我们利用"正难则反"的策略

题目说每次都是从最左边或者最右边拿一个数来给x减掉,直到x为0,求最小的操作数

那么我们可以把题目转化为:求最长的子数列,要求子序列的和为 "数组和 - x"

这样就转化为我们熟悉的题目了

此类题目依旧可以用滑动窗口来解决

(1)进窗口:利用sum来表示当前窗口的元素和,sum += nums[right]

(2)判断:sum > targret ,则出窗口

(3)出窗口:sum -= target,直到sum < target(这里在前几题已说明)

题解:

 
class Solution {public int minOperations(int[] nums, int x) {int n = nums.length;int min = n + 1;int s = 0;for(int t : nums){s += t;}for(int right = 0,left = 0,target = s - x,sum = 0; right < n; right++){sum += nums[right];while(sum > target && left <= right){sum -= nums[left++];}if(sum == target){min = Math.min(min,n - (right - left + 1));}}return min == n + 1 ? -1 : min;}}

5.水果成篮

题目:. - 力扣(LeetCode)

题目转化:找一个最长子序列,子序列中的水果类型不超过两种

我们很容易想到暴力解法,即暴力枚举出所有的结果,其中可以利用哈希表检查水果的类型数量

我们可以在暴力枚举的方法上进行优化:

(1)当right到达如图所示的位置时,如果用暴力解法,那么left++后,right要从left的位置开始遍历.但是事实上不必如此.right还是在原来的位置,因为之前的类型中已经记录下right之前的水果类型数目.那么这就是我们的滑动窗口

(2)在出窗口时,不仅仅是left++

如上图:即使left++后,水果类型的数据还是大于2,因此我们应该一直让left++,直到水果类型数目小于等于2

那么其中就要记录下每种水果的数目,每次出窗口都要让当前类型的水果-1,假设某种水果的数量为0,则类型-1

我们可以利用Map的键值对来解决这个问题

题解:

(1)进窗口:每次将fruits[right]的水果数目+1

(2)判断当前水果类型数目是否大于2

(3)出窗口(按照上面的要求)

 class Solution {public int totalFruit(int[] fruits) {Map<Integer,Integer> type = new HashMap<>();int count = 0;int n = fruits.length;for(int left = 0, right = 0; right < n; right++){type.put(fruits[right],type.getOrDefault(fruits[right],0)+1);while(type.size() > 2){int tmp = fruits[left];type.put(tmp,type.get(tmp)-1);if(type.get(tmp) == 0){type.remove(tmp);}left++;}count = Math.max(count,right-left+1);}return count;}}

但是当我们提交时还是会发现时间复杂度偏大,我们看看题目的数据范围:

也就是我们没必要设置一个Map,我们是知道数据的范围的

所以进行优化,引进一个num来代表水果的类型数量

 class Solution {public int totalFruit(int[] fruits) {int n = fruits.length;int[] type = new int[n + 1];int count = 0;for(int left = 0, right = 0, num = 0; right < n; right++){if(type[fruits[right]] == 0){num++;}type[fruits[right]]++;while(num > 2){int tmp = fruits[left];type[tmp]--;if(type[tmp] == 0){num--;}left++;}count = Math.max(count,right-left+1);}return count;}}

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

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

相关文章

YOLOv8改进 | 独家创新篇 | 结合SOTA思想利用双主干网络改进YOLOv8(全网独家创新,最重磅的更新)

一、本文介绍 本文给大家带来的改进机制是结合目前SOTAYOLOv9的思想利用双主干网络来改进YOLOv8(本专栏目前发布以来改进最大的内容,同时本文内容为我个人一手整理全网独家首发 | 就连V9官方不支持的模型宽度和深度修改我都均已提供,本文内容支持YOLOv8全系列模型从n到x均可…

刷题笔记 洛谷 P1162 填涂颜色

思路来自 大佬 hat.openai.com/c/9c30032e-5fb9-4677-8c15-9ea6530dc6db 题目链接 P1162 填涂颜色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 搜索 首先 在外面围上一圈0开始搜素 因为题目说将封闭区域内的0变成2 我们可以在外面进行搜索 把外面所有可以搜索…

Nginx----高性能的WEB服务端(四)

一、http 协议反向代理 1、反向代理&#xff1a;缓存功能 ​ proxy_cache zone_name | off; 默认off #指明调用的缓存&#xff0c;或关闭缓存机制;Context:http, server, location #zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string; #缓存中…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(5.详解List数据结构)

本文是深入理解 Redis 常用数据类型源码及底层实现系列的第5篇&#xff5e;前4篇可移步(&#xffe3;∇&#xffe3;)/ 【Redis】深入理解 Redis 常用数据类型源码及底层实现&#xff08;1.结构与源码概述&#xff09;-CSDN博客 【Redis】深入理解 Redis 常用数据类型源码及底…

BeautifulSoup+xpath+re+css简单复习+新的scrapy的学习

1.BeautifulSoupsoup BeautifulSoup(html,html.parser)all_icosoup.find(class_"DivTable") 2.xpath trs resp.xpath("//tbody[idcpdata]/tr") hong tr.xpath("./td[classchartball01 or classchartball20]/text()").extract() 这个意思是找…

文件拖放到窗体事件

网上的实现1 实现结果 具体实现代码&#xff1a;注意需要使能允许拖拽 public partial class Form1 : Form {public Form1(){InitializeComponent();this.AllowDrop true; //允许拖拽}private void Form1_DragEnter(object sender, DragEventArgs e){this.Text DateTime.No…

一键安装|卸载 mysql 8.2.0 shell脚本

场景&#xff1a;为了在无网、外网 mysql 安装方便&#xff0c;这里分享一个自己编写得 shell脚本 这里以当前最新版 mysql 8.2.0&#xff1b;centos-7 二进制包下载&#xff1a; 下载地址 mysql_install.sh #!/bin/bash # 解压安装包 tar -xf mysql-8.2.0-linux-glibc2.17-x8…

TC3xx SMU、PMIC和Tranceiver的功能安全闭环

目录 1.TLF35584安全状态输出响应对象 1.1 响应ERR 收集到的错误信号 1.2 响应监控功能引发的ROT 1.3 响应看门狗引发的错误 1.4 环境过温引发的错误状态 1.5 为什么设计SSx&#xff1f; 2. 安全状态输出给谁 3.小结 在之前文章里&#xff0c;我们简述了TC3xx SMU如何…

尚硅谷(SpringCloudAlibaba微服务分布式)学习代码Eureka部分

1.项目结构 2.cloud2024 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.a…

面试笔记系列六之redis+kafka+zookeeper基础知识点整理及常见面试题

Redis redis持久化机制&#xff1a;RDB和AOF Redis 持久化 Redis 提供了不同级别的持久化方式: RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储. AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redi…

IPD(集成产品开发)—核心思想

企业发展到一定阶段就会遇到管理瓶颈&#xff0c;IPD流程是一种高度结构化的产品开发流程&#xff0c;它集成了业界很多优秀的产品开发方法论&#xff0c;像搭积木一样的组合成一种非常有效的流程。如果我们能根据企业的规模和行业特点&#xff0c;对全流程的IPD进行合适的裁剪…

html2canvas + JsPDF.js 导出pdf分页时的问题

问题描述 前一段时间 实现了html2canvas jspdf.js 导出pdf的功能 项目当时没有测试做完就先搁置 最近项目要上线发现分页时问题 这篇文章记录一下之前的bug import html2canvas from html2canvas; import JsPDF from jspdf export function savePdf(el, title) {html2canva…

Google checkstyle实战

概述 CheckStyle检查代码是否符合制定的规范。CheckStyle检查是基于源码的&#xff0c;无需编译&#xff0c;执行速度快。 CheckStyle的主要流程是&#xff1a; 对Java文件进行词法语法分析&#xff0c;生成语法树。载入配置文件&#xff08;checkstyle-metadata.xml以及自定…

【ElfBoard】基于 Linux 的智能家居小项目

大家好&#xff0c;我是 Hello阿尔法&#xff0c;这段时间参与了保定飞凌嵌入式技术有限公司举办的 ElfBoard 共创社招募活动&#xff0c;并有幸成为了一名共创官&#xff0c;官方寄来了一块 ELF 1 开发板&#xff0c;开箱看这里 ELF 1 开箱初体验。 作为共创官&#xff0c;我…

数据可视化工具选择指南:山海鲸、Tableau与Power BI特点详解

在数据可视化的领域中&#xff0c;众多工具各有千秋。今天&#xff0c;我们将从客观的角度&#xff0c;对三款热门的数据可视化产品——山海鲸可视化、Tableau和Power BI进行深入的对比&#xff0c;帮助用户更全面地了解它们的特点&#xff0c;从而做出更明智的选择。 一、产品…

移动硬盘在电脑上显示不出来?三招教你轻松应对

随着网络的普及&#xff0c;数据的增多&#xff0c;对于数据储存的需要也是越来越多&#xff0c;相信许多人的手中都存在着一些如U盘、MP3、MP4、移动硬盘之类的储存设备&#xff0c;而在使用这些设备的时候&#xff0c;难免会遇到一些这样或那样的问题&#xff0c;比如移动硬盘…

微信小程序证书评级导致接口无法访问问题

微信小程序的ssl证书到期后&#xff0c; 更换了免费的ssl证书&#xff0c; 是在freessl网站申请的&#xff0c; 配置完了&#xff0c;后台可以访问https网页&#xff0c;但是小程序还是无法访问&#xff0c; 开始没有怀疑是https证书的问题&#xff0c; 调适了好长时间的代码&a…

Scala Intellij编译错误:idea报错xxxx“is already defined as”

今天写scala代码时,Idea报了这样的错误&#xff0c;如下图所示&#xff1a; 一般情况下原因分两种&#xff1a; 第一是我们定义的类或对象重复多次出现&#xff0c;编译器无法确定使用哪个定义。 这通常是由于以下几个原因导致的&#xff1a; 重复定义&#xff1a;在同一个文件…

【探索AI】十一 深度学习之第1周:深度学习概述与基础

深度学习概述与基础 深度学习的发展历史与现状神经网络的基本原理前向传播与反向传播算法常见的激活函数与优化算法深度学习框架&#xff08;如TensorFlow或PyTorch&#xff09;进行基础操作 深度学习的发展历史与现状 深度学习的发展历史可以追溯到上世纪40年代&#xff0c;当…

24计算机考研深大经验分享(计算机专业考研综合安排)

文章目录 背景科目选择高数选课一轮二轮冲刺阶段 线代一轮二轮 概率论计算机学科专业基础408数据结构计算机组成原理操作系统计算机网络总结 英语政治 末言 背景 首先贴一下初试成绩。这篇分享主要是给零基础的同学使用的&#xff0c;基础好的同学可以自行了解补充一下&#xf…