力扣3152. 特殊数组 II

如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。

周洋哥有一个整数数组 nums 和一个二维整数矩阵 queries,对于 queries[i] = [fromi, toi],请你帮助周洋哥检查子数组 nums[fromi..toi] 是不是一个 特殊数组 

返回布尔数组 answer,如果 nums[fromi..toi] 是特殊数组,则 answer[i] 为 true ,否则,answer[i] 为 false 。

示例 1:

输入:nums = [3,4,1,2,6], queries = [[0,4]]

输出:[false]

解释:

子数组是 [3,4,1,2,6]。2 和 6 都是偶数。

示例 2:

输入:nums = [4,3,1,6], queries = [[0,2],[2,3]]

输出:[false,true]

解释:

  1. 子数组是 [4,3,1]。3 和 1 都是奇数。因此这个查询的答案是 false
  2. 子数组是 [1,6]。只有一对:(1,6),且包含了奇偶性不同的数字。因此这个查询的答案是 true

提示:

  • 1 <= nums.length <= 10^5
  • 1 <= nums[i] <= 10^5
  • 1 <= queries.length <= 10^5
  • queries[i].length == 2
  • 0 <= queries[i][0] <= queries[i][1] <= nums.length - 1

思路

1.暴力,直接遍历每一个要求的区间,每一个区间都检查一次是否符合要求

2,预处理标定范围,然后每一次查找都是常数时间

首先可以通过定义知道如果数组中存在两个范围,范围内符合要求,那么两个范围一定相邻,

即0110,可以分为01,10 两个合法区域,且不存在一个合法区域介于两个区域之间

那么就可以通过预处理,对处于同一个区域的数据做标记,在查找时比较范围边界是否在相同区域即可,预处理时间复杂度为O(n),单次查找为O(1),全部查找为O(n),则时间复杂度为O(n)

代码

class Solution {
public:vector<bool> isArraySpecial(vector<int>& nums,vector<vector<int>>& queries) {vector<int> temp = vector<int>(nums.size());//预处理结果vector<bool> re = vector<bool>(queries.size());if (nums.size() == 1) {for (int i = 0; i < queries.size(); i++) re[i] = true;return re;}for (int i = 0; i < nums.size() - 1;) {//预处理,将范围的右边界值作为范围标记int k = i;for (int j = i; j < nums.size() - 1; j++) {if ((nums[j] & 1) != (nums[j + 1] & 1))k = j+1;elsebreak;}for (int j = i; j <= k; j++)temp[j] = k;k++;i = k;}if ((nums[nums.size() - 1] & 1) != (nums[nums.size() - 2] & 1))//对最后一个元素进行预处理temp[nums.size() - 1] = temp[nums.size() - 2];elsetemp[nums.size() - 1] = temp[nums.size() - 2] + 1;for (int i = 0; i < queries.size(); i++) {//进行查找,判断指定范围是否合法if (temp[queries[i][0]] == temp[queries[i][1]])re[i] = true;elsere[i] = false;}return re;}
};

看了大佬的代码,感觉自己写的太丑了,靠直觉写出来的东西,还要有边界的单独处理,这里稍作修改

class Solution {
public:vector<bool> isArraySpecial(vector<int>& nums,vector<vector<int>>& queries) {vector<int> temp = vector<int>(nums.size());vector<bool> re = vector<bool>(queries.size());temp[0] = 1;//给一个默认值,没有也可以过,但是最好初始化for (int i = 1; i < nums.size(); i++) {//只需要标记出不同区域即可,此处复杂度减半if ((nums[i] & 1) != (nums[i-1] & 1))temp[i] = temp[i - 1];elsetemp[i] = temp[i - 1] + 1;}for (int i = 0; i < queries.size(); i++) {if (temp[queries[i][0]] == temp[queries[i][1]])re[i] = true;elsere[i] = false;}return re;}
};

 

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

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

相关文章

hcip—VLAN实验

目录 实验拓扑&#xff1a; 实验目的&#xff1a; 实验思路&#xff1a; 实验步骤&#xff1a; 1.创建VLAN 2.将接口放进相应VLAN当中&#xff0c;并配置接口类型&#xff08;hybrid口配置撕tag表&#xff09; 3.配置路由器接口 4.配置DHCP服务 pc1 ping pc4的过程分析…

esp32 编程指南核心文件

ESP-IDF 编程指南 - ESP32-C3 - — ESP-IDF 编程指南 v5.1 文档 (espressif.com) ESP-IDF 入门指南 | 乐鑫科技 (espressif.com)

linux下的docker使用

docker是什么&#xff0c;docker翻译过来的意思就是码头工人&#xff0c;顾名思义&#xff0c;docker本质上就是一个搬运工&#xff0c;只不过从搬运货物改成了搬运程序&#xff0c;使搬运的不同的程序能够独立的运行在码头上的不同容器内&#xff0c;互不干扰&#xff0c;而他…

“腾讯云 AI 代码助手”体验

一、“腾讯云 AI 代码助手”体验 1、注册账号并进行实名认证 2、进入开发环境 3、体验javascript简单函数 代码如下&#xff1a; //请写一个两个日期计算的函数 function dateDiff(date1, date2) {return date2.getTime() - date1.getTime(); } var date1 new Date("2…

智享无人直播系统(三代)融合AI智能互动,成就无人直播行业的新巨星!

随着直播行业的不断发展&#xff0c;智享直播&#xff08;三代&#xff09;作为首家自主研发的智能AI直播软件引领了行业的新潮流。相比市场上的其他同类软件&#xff0c;我们的软件通过创新的功能实现了直播间的AI智能互动&#xff0c;提供了丰富而个性化的直播体验。最重要的…

fmql入门之对标zynq差异(2)

还是有很多地方需要注意的&#xff0c;细节又繁琐。 AXI 接上一篇&#xff0c;Program bit后&#xff0c;IAR debug无现象&#xff1a; prinft没有打印出字符串&#xff1b;GPIO初始化失败。 不知道是不是vivado补丁失败的原因&#xff1a; 但是重新分析综合后还是这样。 …

Lc43---- 1221. 分割平衡字符串(java版)---(贪心)(字符串)

1.题目描述 2.知识点和思路 &#xff08;1&#xff09;贪心算法的基本思想 选择性质&#xff1a;在每一步中&#xff0c;选择当前最优的选项&#xff0c;不考虑未来的后果。 局部最优解&#xff1a;通过一系列局部最优选择&#xff0c;构建全局最优解。 不可回溯&#xff1a;一…

2024电工杯A题详细思路代码分析数学建模:园区微电网风光储协调优化配置

题目分析&#xff1a;园区微电网风光储协调优化配置 我们会先给出三个问题总体的分析&#xff0c;最后会详细分析问题一的建模和详细内容。 背景&#xff1a; 园区微电网由风光发电和主电网联合为负荷供电&#xff0c;为了尽量提高风光电量的负荷占比&#xff0c;需配置较高比…

SpringBoot 实现图片防盗链功能

前言 出于安全考虑&#xff0c;我们需要后端返回的图片只允许在某个网站内展示&#xff0c;不想被爬虫拿到图片地址后被下载。或者&#xff0c;不想浏览器直接访问图片链接。 出于性能考虑&#xff0c;不想要别人的网站&#xff0c;拿着我们的图片链接去展示&#xff0c;白白…

【Spring】Spring事务管理——声明式事务管理代码示例

1、声明式事务管理 步骤一&#xff1a;添加Spring和JDBC的依赖 <dependencies> <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>你的S…

python+opencv提取.mp4 视频的每一帧并将其保存为图片

提取 .mp4 视频的每一帧并将其保存为图片&#xff0c;可以使用 cv2 库&#xff08;OpenCV&#xff09;。下面是一个完整的示例代码&#xff0c;演示如何使用 OpenCV 提取视频的每一帧并将其保存为图片&#xff0c;使用时需要将mp4文件及路径放至video_path &#xff0c;提取的图…

02--大数据Hadoop集群实战

前言&#xff1a; 前面整理了hadoop概念内容&#xff0c;写了一些概念和本地部署和伪分布式两种&#xff0c;比较偏向概念或实验&#xff0c;今天来整理一下在项目中实际使用的一些知识点。 1、基础概念 1.1、完全分布式 Hadoop是一个开源的分布式存储和计算框架&#xff0…

C++对C的扩充

C既可用于面向过程的程序设计&#xff0c;也可用于面向对象的程序设计。在面向过程程序设计的领域&#xff0c;C继承了C语言提供的绝大部分功能和语法规定&#xff0c;并在此基础上做了不少扩充&#xff0c;主要有一下几个方面&#xff1a; 1.C的输入输出 C为了方便用户&…

Spring 事务源码分析

前言&#xff1a; 我们知道 Spring 声明式事务是通过 AOP 来实现的&#xff0c;日常项目开发中我们只需要使用 Transactional 注解就可以实现声明式事务&#xff0c;那你知道通过 Transactional 注解怎样实现事务的吗&#xff1f;本篇我们将从源码来分析 Spring 声明式事务的执…

STM32定时器四大功能之定时器编码接口

1什么是编码器接口&#xff1f; 编码器接口接受编码器的正交信号&#xff0c;根据编码器产生的正交信号脉冲控制CNT的自增和自减&#xff0c;从而指示编码器的旋转方向和旋转速度。 每个高级定时器和通用定时器都有一个编码器接口&#xff0c;同时正交编码器产生的正交信号分…

Redis 的持久化(真的好细)

前言 Redis 是一个内存数据库&#xff0c;把数据存储在内存中&#xff0c;而内存中的数据是不持久的&#xff0c;要想数据持久就得将数据存储到硬盘中&#xff0c;而 Redis 相比于 Mysql 这样的关系型数据库最大的优势就在于将数据存储在内存中从而效率更高&#xff0c;速度更快…

docker 安装RabbitMQ-web版本

直接拉去web版本 docker pull rabbitmq:management启动命令 设置用户名 admin 密码123456 docker run -dit --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASS123456 rabbitmq:management访问地址 http://127.0.0.1:…

配置证书443访问 -- 集成框架

配置证书443访问 前言正文步骤1: 准备证书基于Nginx镜像 前言 由于业务要求需要对当前网络请求服务器不走80端口&#xff0c;进行443 https证书访问。 文档有点丑见谅&#xff0c;我还没加样式 正文 要让运行在Docker容器中的前端应用在443端口上使用SSL/TLS证书&#xff0…

【x264】编码核心函数(x264_encoder_encode)的简单分析

【x264】编码模块&#xff08;x264_encoder_encode&#xff09;简单分析 1.编码帧函数&#xff08;x264_encoder_encode&#xff09;1.1 拷贝一帧并移动到buffer中&#xff08;x264_frame_pop_unused&#xff09;1.2 拷贝一帧送入队列用于确定帧类型&#xff08;x264_lookahead…

EC2 Linux 开机自启脚本:必要性和实现

在 Amazon EC2 Linux 实例上配置开机自启脚本是一个常见的需求。这种自启动脚本具有重要的实践意义,主要体现在以下几个方面: 必要性 服务自动启动 当 EC2 实例启动时,可以自动启动一些关键服务,如 Web 服务、数据库服务等,而不需要手动去启动。这有助于提高服务的可用性和可靠…