【教3妹学编程-算法题】匹配模式数组的子数组数目 I

瑟瑟发抖

3妹:2哥2哥,你有没有看到上海女老师出轨男学生的瓜啊。
2哥 : 看到 了,真的是太毁三观了!
3妹:是啊, 老师本是教书育人的职业,明确规定不能和学生谈恋爱啊,更何况是出轨。
2哥 : 是啊,更何况男生才16,年龄也不匹配啊。
3妹:抛开这个事件不说,你觉得多大的年龄差才是匹配的?2哥找到你匹配的另一半了吗?
2哥:切,又拿我单身狗开玩笑了。
3妹:说到匹配,我今天看到一个关于“匹配”的题目,让我们一起来做下吧~

吃瓜

题目:

给你一个下标从 0 开始长度为 n 的整数数组 nums ,和一个下标从 0 开始长度为 m 的整数数组 pattern ,pattern 数组只包含整数 -1 ,0 和 1 。

大小为 m + 1 的
子数组
nums[i…j] 如果对于每个元素 pattern[k] 都满足以下条件,那么我们说这个子数组匹配模式数组 pattern :

如果 pattern[k] == 1 ,那么 nums[i + k + 1] > nums[i + k]
如果 pattern[k] == 0 ,那么 nums[i + k + 1] == nums[i + k]
如果 pattern[k] == -1 ,那么 nums[i + k + 1] < nums[i + k]
请你返回匹配 pattern 的 nums 子数组的 数目 。

示例 1:

输入:nums = [1,2,3,4,5,6], pattern = [1,1]
输出:4
解释:模式 [1,1] 说明我们要找的子数组是长度为 3 且严格上升的。在数组 nums 中,子数组 [1,2,3] ,[2,3,4] ,[3,4,5] 和 [4,5,6] 都匹配这个模式。
所以 nums 中总共有 4 个子数组匹配这个模式。
示例 2:

输入:nums = [1,4,4,1,3,5,5,3], pattern = [1,0,-1]
输出:2
解释:这里,模式数组 [1,0,-1] 说明我们需要找的子数组中,第一个元素小于第二个元素,第二个元素等于第三个元素,第三个元素大于第四个元素。在 nums 中,子数组 [1,4,4,1] 和 [3,5,5,3] 都匹配这个模式。
所以 nums 中总共有 2 个子数组匹配这个模式。

提示:

2 <= n == nums.length <= 100
1 <= nums[i] <= 109
1 <= m == pattern.length < n
-1 <= pattern[i] <= 1

思路:

思考

KMP,
把 nums的相邻元素,根据题目规定的大小关系,转换成 1,0,−1,得到一个长为 n−1的数组 bbb。

问题相当于问 b 中有多少个连续子数组等于 pattern。

这是一个标准的字符串匹配问题(本题匹配的是数字不是字符),可以用 KMP解决。

java代码:

class Solution {public int countMatchingSubarrays(int[] nums, int[] pattern) {int m = pattern.length;int[] pi = new int[m];int cnt = 0;for (int i = 1; i < m; i++) {int v = pattern[i];while (cnt > 0 && pattern[cnt] != v) {cnt = pi[cnt - 1];}if (pattern[cnt] == v) {cnt++;}pi[i] = cnt;}int ans = 0;cnt = 0;for (int i = 1; i < nums.length; i++) {int v = Integer.compare(nums[i], nums[i - 1]);while (cnt > 0 && pattern[cnt] != v) {cnt = pi[cnt - 1];}if (pattern[cnt] == v) {cnt++;}if (cnt == m) {ans++;cnt = pi[cnt - 1];}}return ans;}
}

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

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

相关文章

导出本地环境venv包whl文件。

把python环境 venv 对应包的文件导出成whl文件 将 Python 虚拟环境中包导出到文件&#xff0c;可以方便地在其他电脑上安装相同的环境&#xff0c;无需重复下载。 使用 pip freeze 和 pip download 使用 pip freeze 命令列出所有已安装的包和版本号保存到 requirements.txt …

Sora----打破虚实之间的最后一根枷锁----这扇门的背后是人类文明的晟阳还是最后的余晖

目录 一.Sora出道即巅峰 二.为何说Sora是该领域的巨头 三.Sora无敌的背后究竟有怎样先进的处理技术 1.Spacetime Latent Patches 潜变量时空碎片&#xff0c;建构视觉语言系统 2.扩散模型与Diffusion Transformer&#xff0c;组合成强大的信息提取器 3.DiT应用于潜变量时…

小区视频汇聚与智能监管方案:老破小升级改造与小区智慧化建设

一、需求背景 在当今数字化时代&#xff0c;智慧小区已成为城市建设的必然趋势。加快小区智能化改造&#xff0c;不断完善小区管理和服务&#xff0c;彻底改变粗放型管理方式已经成为当前小区智慧化趋势的重要任务。其中&#xff0c;智能视频监控系统在提高小区安全性和管理效…

T-Dongle-S3开发笔记——分区表

参考&#xff1a; ESP32之 ESP-IDF 教学&#xff08;十三&#xff09;—— 分区表_esp32分区表-CSDN博客 分区表 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 分区表是 ESP32 划分内部 flash 闪存的清单&#xff0c;它将 flash 划分为多个不同功能的区域用于…

交通强国,数字引领|易知微数字孪生智慧港口,探索未来港口的无限可能

点击下载了解易知微数字孪生智慧港口解决方案&#x1f449;https://easyv.cloud/solution/port/?tcsdn 2023年12月&#xff0c;为推动智慧港口和智慧航道建设发展&#xff0c;加快建设交通强国水运&#xff0c;交通运输部发布《关于加快智慧港口和智慧航道建设的意见》。到20…

哪种游泳耳机品牌更好?2024四款甄选高评分榜单好物!

在繁忙的都市生活中&#xff0c;游泳已经成为了许多人释放压力、保持健康的重要方式。而随着科技的进步&#xff0c;游泳耳机也逐渐走进了人们的视野&#xff0c;让音乐与游泳完美结合&#xff0c;为游泳爱好者带来了全新的运动体验。然而&#xff0c;在琳琅满目的游泳耳机市场…

vite为什么编译比webpack快

启动速度&#xff1a;Vite在启动时不需要打包&#xff0c;因为它支持ES模块加载&#xff0c;不需要编译和打包所有模块的依赖。这意味着Vite在启动时不需要像Webpack那样构建整个项目的文件&#xff0c;因此启动速度更快。 1 vite 采用 es 新规范 vite 中的 main.ts 中可以直…

camunda源代码编译运行(三):验证camunda API接口功能

接上一篇文章&#xff1a;camunda源代码编译运行&#xff08;二&#xff09;&#xff1a;构建并运行camunda源代码工程 4.1、发布流程模型 先通过camunda的流程设计器设计一个流程&#xff0c;命名为&#xff1a;UserTask Flow1&#xff0c;然后发布流程&#xff0c;发布流程…

C语言第二十九弹---浮点数在内存中的存储

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、浮点数在内存中的存储 1.1、练习 1.2、浮点数怎么转化为二进制 1.3、浮点数的存储 1.3.1、浮点数存的过程 1.3.2、浮点数取的过程 1.3、题目解析…

jquery 简介与解析

jQuery是一个快速、小巧且功能丰富的JavaScript库。它简化了诸如HTML文档遍历和操作、事件处理、动画以及Ajax操作等任务。jQuery的设计理念是“写得更少&#xff0c;做得更多”&#xff0c;这意味着通过jQuery&#xff0c;可以用更少的代码完成更多的工作。 主要特点&#xff…

Druid无法登录监控页面

问题表现&#xff1a;在配置和依赖都正确的情况下&#xff0c;无法通过配置的用户名密码登录Druid的监控页面 检查配置发现 配置的用户名和密码和请求中参数是一致的&#x1f914; Debug发现 ResourceServlet 是Druid的登录实现&#xff0c; 且调试发现usernameParam是null&am…

java集合解析-Collection 类型

Java 集合概览 Java 集合&#xff0c; 也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a; 一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b; 另一个是 Map 接口&#xff0c;主要用于存放键值对。对于Collection 接口&#xff0c;下面又有三个…

骨传导什么牌子好?六大专业选购的黄金规则与避坑指导

谈论到运动时佩戴的耳机&#xff0c;骨传导耳机必须是话题中的热点。与传统耳机或入耳式耳机不同&#xff0c;骨传导耳机解放了你的耳道&#xff0c;让你在挥洒汗水的同时&#xff0c;也能享受音乐的魅力。更重要的是&#xff0c;它不会阻碍你听到周围的声音&#xff0c;这对于…

盘点自动化汽车生产线设备 数据采集分析联合各设备

1.机器人自动装配线 机器人自动装配线已成为汽车制造业中的常见场景。这些机器人在汽车组装的各个环节发挥关键作用&#xff0c;从焊接和铆接到零部件组装。它们不仅提高了装配速度&#xff0c;还确保了产品的一致性&#xff0c;降低了废品率。 2.3D打印技术 3D打印技术正在汽车…

医院信息系统(HIS):一文扫盲,算是所有信息系统里面复杂的

大家好&#xff0c;我是贝格前端工场&#xff0c;本期继续分享常见的B端管理系统&#xff0c;欢迎大家关注&#xff0c;如有B端写系统界面的设计和前端需求&#xff0c;可以联络我们。 一、什么是HIS系统 HIS系统&#xff08;Hospital Information System&#xff09;是医院信…

【操作系统】磁盘存储空间的管理

实验5 磁盘存储空间的管理 一、实验目的 磁盘是用户存放程序和数据的存储设备&#xff0c;磁盘管理的主要目的是充分有效地利用磁盘空间。本实验模拟实现磁盘空间的分配与回收&#xff0c;使学生对磁盘空间的管理有一个较深入的理解。 二、实验内容 实验任务&#xff1a;用位…

Canal + Kafka 同步 MySQL 数据到 Redis

解决缓存和数据库一致性问题 一般来说&#xff0c;缓存中的数据没什么问题&#xff0c;但是数据库更新后&#xff0c;就容易出现缓存&#xff08;Redis&#xff09;和数据库&#xff08;MySQL&#xff09;间的数据一致性问题。由于写和读是并发的&#xff0c;没法保证顺序&…

运营抖店为什么不能多选类目?什么类目适合新手来玩?

大家好&#xff0c;我是电商小布。 想要入驻抖音小店&#xff0c;必备的资质材料就是营业执照。 而执照上的范围&#xff0c;就是我们开店所能选择的经营类目。 有的小伙伴在开店的时候&#xff0c;并没有想明白自己是想要做什么&#xff0c;小店未来的发展方向是什么。 结…

Docker基础篇(四) 容器数据卷 容器间传递共享(--volumes-from)

容器间传递共享 当前没有运行的容器 两个数据卷&#xff1a; containVolum-01 containVolum-02 docker run -it --name zenA zen/centos 上面生成了容器 zenA ctrl P Q docker run -it --name zenB1 --volumes-from zenA zen/centos ctrl P Q docker run -it --name zen…