当前位置: 首页 > news >正文

【leetcode图文详解】特殊数组II : 空间换时间的“记忆化”,越多越好吗?

题目详解

需求:判断给定区间内的元素是否满足“特殊数组”要求

尝试: 暴力求解?

如果试着直接对每个queries中的区间进行检测而不做其他处理,那么最后不出意外地超时了。。

细想优化策略,不难察觉到其中可能存在大量的重复运算

那还等什么(doge)?记忆化!

记忆化

设置rem数组,rem[ i ] = k 意味着nums从 i 到 k 的元素均满足“特殊数组”要求

int *rem = (int *)calloc(sizeof(int), sz+1);
//更新rem示例:
for(int m=st; m<=ed; m++) rem[m] = ed;
一个错误想法:

不妨思考,下面利用 rem 的记录判断符合“特殊数组”的考虑,完善吗?

int st = queries[i][0];//起始位置
int ed = queries[i][1];//终止位置
if(rem[st] != 0 && rem[ed] != 0) return true;

答案是否定的,比如下面这种情况,就会漏掉中间绿色部分的检验。

那怎么办嘞?

其实不难,只要再加上rem值相等的条件就好啦~

if(rem[st] != 0 && rem[ed] != 0 && rem[st] == rem[ed]) return true;

记忆化,越多越好吗?

        按理说,后面的思路应该就很清楚了,只要根据 rem[st] 和 rem[ed] 取值的不同情况,分别检验 & 记忆化处理即可。

        但写完提交,虽然AC了,但是,本以为记忆化能大大提升时间效率的我,却碰上远低于平均值的结果。

 其实,边写的时候,笔者也隐约感觉有些重复,毕竟更新rem的过程本身就是耗费时力的

        于是,笔者试着注释掉一些记忆化操作,保留了两处较为主要的部分,果然,去掉了部分记忆化,反倒轻松多了~

  // 虽然跟大佬们比起来还是差很多(小声),后面笔者会去学习一下优秀代码,再写篇解读文章~

AC代码见下

// 由于分类讨论较多,显得有点冗长(小声)

class Solution {
public:vector<bool> isArraySpecial(vector<int>& nums, vector<vector<int>>& queries) {int sz = nums.size();int *rem = (int *)calloc(sizeof(int), sz+1);vector<bool>ret;//返回数组//遍历 queriesfor(int i=0; i<queries.size(); i++){int st = queries[i][0];int ed = queries[i][1];if(rem[st] != 0 && rem[ed] != 0 && rem[st] == rem[ed]) ret.push_back(true);else if(rem[st] != 0){st = rem[st];int j=st+1;for(; j<=ed; j++){if(nums[j]%2 == nums[j-1]%2) {ret.push_back(false);break;}}if(j > ed)	ret.push_back(true);}else if(rem[ed] != 0){for(int k=st+1; k<=ed; k++){if(nums[k]%2 == nums[k-1]%2) {ret.push_back(false); break;}if(rem[k] == rem[ed]){ret.push_back(true);//记忆化for(int m=st; m<=k; m++)rem[m] = rem[ed];break;}}}else{int k=st+1;for(; k<=ed; k++){if(nums[k]%2 == nums[k-1]%2){ret.push_back(false); break;}if(rem[k] != 0) k = rem[k];}if(k > ed){ret.push_back(true);	//记忆化for(int m=st; m<=ed; m++)rem[m] = ed;}}}return ret;}
};
~希望对你有启发~

相关文章:

【leetcode图文详解】特殊数组II : 空间换时间的“记忆化”,越多越好吗?

题目详解 需求&#xff1a;判断给定区间内的元素是否满足“特殊数组”要求 尝试: 暴力求解? 如果试着直接对每个queries中的区间进行检测而不做其他处理&#xff0c;那么最后不出意外地超时了。。 细想优化策略&#xff0c;不难察觉到其中可能存在大量的重复运算 那还等什…...

离线安装prometheus与Grafana实现可视化监控

简介 prometheus 是一个专为云环境设计的开源系统监控和警报工具&#xff0c;它收集并存储多维度的时间序列数据&#xff0c;通过PromQL查询语言提供强大的数据检索能力&#xff0c;并支持可视化及警报功能。而 Grafana 则是一个开源的数据可视化平台&#xff0c;能够与包括Pr…...

【Python学习-UI界面】PyQt5 小部件7-QSpinBox 计数器

样式如下: 一个 QSpinBox 对象向用户呈现一个文本框&#xff0c;右侧有一个上下按钮&#xff0c;显示一个整数。如果按下上下按钮&#xff0c;文本框中的值将增加/减少。 默认情况下&#xff0c;框中的整数从0开始&#xff0c;最高到99&#xff0c;并以步长1变化。对于浮点数…...

[二次元]个人主页搭建

文章目录 域名买一个免费的 框架HexoHexo-Theme-ParticleX Halo 参考 域名 买一个 有钱人玩这个 免费的 github.io 教程在github官方文档有&#xff1b; 框架 Hexo 静态的 Hexo-Theme-ParticleX Argvchsの小窝 Halo 动态的 halo 参考 基于Hexo框架的GitHub个人主页…...

Spring Data JPA 自动创建时间的相关注解和用法

以Springboot项目为例 在实体类上加上注解 EntityListeners(AuditingEntityListener.class)在相应的字段上添加对应的时间注解 LastModifiedDate 和 CreatedDateApplication启动类中添加注解 EnableJpaAuditing...

Java基础之隐式类型转换

类型转换 基本数据类型表示范围大小排序&#xff1a; 在变量赋值及算术运算的过程中&#xff0c;经常会用到数据类型转换&#xff0c;其分为两类&#xff1a; 隐式类型转换 显式类型转换 1 隐式类型转换 情形1&#xff1a;赋值过程中&#xff0c;小数据类型值或变量可以直…...

【数据结构与算法 | 图篇】Dijkstra算法(单源最短路径算法)

1. 前言 由图&#xff1a; 如果我们想要求得节点1到节点5&#xff08;也可以是其他节点&#xff09;的最短路径&#xff0c;我们可以使用Dijkstra算法。 2. 步骤与思路 1. 将所有顶点标记为未访问(顶点类的visited属性设置为false)。创建一个未访问顶点的集合。 2. 为每个顶…...

windows c转linux c要做的事情。

写在开头&#xff1a; 最近的copy项目要转到windows版本了&#xff0c;一直在跟进做这个事情。 直入主题说下移植过程中可能涉及以下几个方面的调整&#xff1a;‌ 编译器和工具链的更改&#xff1a;‌Windows和Linux使用不同的编译器和工具链&#xff0c;‌因此需要在Windo…...

【高等代数笔记】002.高等代数研究对象(二)

1. 高等代数的研究对象 1.4 一元高次方程的求根 a n x n a n − 1 x n − 1 . . . a 1 x a 0 0 a_{n}x^{n}a_{n-1}x^{n-1}...a_{1}xa_{0}0 an​xnan−1​xn−1...a1​xa0​0 等式左边是一元多项式。 所有一元多项式组成的集合称为一元多项式环。...

ubuntu服务器部署的mysql本地连不上的问题

试过了网上的所有方法,都连不上,可以执行: SELECT user, host, plugin FROM mysql.user WHERE user root; 查一下:plungin这个连接插件是不是auth_socket, auth_socket是只能本地连接的插件,需要修改: ALTER USER root% IDENTIFIED WITH mysql_native_password BY your_pass…...

python redis安装

python redis安装 #方法1、 sudo apt-get install redis-server python 支持包&#xff1a; (其实就一个文件&#xff0c;搞过来就能用) sudo apt-get install python-redis #方法2、 sudo pip install redis...

YJ0043定制版抖音电商卷抢购系统带回收商城抖音电商优惠卷投资理财系统

系统是基于逍遥商城二开的系统&#xff0c;pc手机端都新增了邀请码验证 手机端重新定制的UI&#xff0c;前端产品不至于抖音卷也可以自行更改其他产品 用户前端下单&#xff0c;后台订单可以直接回收&#xff0c;后台支持设置默认邀请码和抢卷时间限制...

如何选择图片和视频

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何选择视频文件"相关的内容&#xff0c;本章回中将介绍如何混合选择图片和视频文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…...

html+css网页制作 电商华为商城首页 ui还原度100%

htmlcss网页制作 电商华为商城首页 ui还原度100% 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码…...

EDAS(企业级应用服务)

1 :介绍 1&#xff1a;edas 提供了应用&#xff0c;开发&#xff0c;部署&#xff0c;监控&#xff0c;运维。同时支持 spring cloud, dubbo ,HSF 2:Ali-Tomcat 基于tomcat改造的Servlet容器。支持原有功能&#xff0c;它在启动时会自动加载Pandora&#xff08;潘多拉&#x…...

简单工厂,工厂方法 和 抽象工厂

这三种模式&#xff0c; 都是创建类型的模式&#xff0c; 将对象的创建流程封装起来供客户调用 简单工厂模式 简介: 和策略模式一样&#xff0c;就是针对不通的参数&#xff0c; 返回不通的实例而已 问题: 没有遵循开闭原则&#xff0c; 如果我们想增加一种类&#xff0c; 那…...

python 压力测试脚本

需求&#xff1a; 生成一个12位不重复的随机数将随机数赋值给Json 串中的 orderCode字段将Json用ECB 指定 key为bJXQezYtR4ZSNK4p进行加密并作为值传给{ “data”: “” }设置每秒30个并发持续1分钟调用接口接口输出测试测试报告 代码示例 import json import random import…...

【Linux】多线程7——线程池

1.线程池的概念 1.1.池化技术 池化技术指的是提前准备一些资源&#xff0c;在需要时可以重复使用这些预先准备的资源。 在系统开发过程中&#xff0c;我们经常会用到池化技术。通俗的讲&#xff0c;池化技术就是&#xff1a;把一些资源预先分配好&#xff0c;组织到对象池中…...

Linux Shell实例

1.查空行 答案&#xff1a; awk /^$/{print NR} file1.txt#awk:一个强大的文本分析工具&#xff0c;把文件逐行的读入&#xff0c;以空格为默认分隔符将每行切片&#xff0c;切开的部分再进行分析#处理。 #1&#xff09;基本语法 #awk [选项参数]/pattern1/{action1} /pattern…...

Linux~MySQL数据库具体操作

一、数据库的字符集编码设置 &#xff08;一&#xff09;查看数据库默认的字符集 MariaDB [(none)]> show variables like %character%; ------------------------------------------------------ | Variable_name | Value | ------------…...

实战应用:使用autoclaw在快马平台快速开发销售数据监控看板

最近在做一个销售数据监控看板的需求&#xff0c;发现用autoclaw配合InsCode(快马)平台可以快速实现从开发到部署的全流程。整个过程比想象中顺畅很多&#xff0c;特别适合需要快速验证业务场景的情况。这里记录下具体实现思路和关键点&#xff1a; 数据准备与连接 首先用autoc…...

泛微E9流程表单转PDF/HTML实战:手把手教你集成档案系统(附完整代码)

泛微E9流程表单转PDF/HTML全流程开发指南&#xff1a;从原理到实战 在企业管理数字化转型的浪潮中&#xff0c;OA系统与档案系统的无缝对接已成为提升组织效能的刚需。作为国内主流的协同办公平台&#xff0c;泛微E9的流程表单承载着企业核心业务流程数据&#xff0c;如何将这些…...

ARMv8、AArch64 与 arm64:命名与体系结构要点

ARMv8、AArch64 与 arm64&#xff1a;命名与体系结构要点 ARMv8 指 ARM 架构的一个主版本代际&#xff1b;AArch64 是该代际下的 64 位执行状态与 A64 指令集&#xff1b;arm64 与 aarch64 是操作系统与工具链中对 AArch64 的常用三元组/目录名&#xff0c;二进制约定一致。下…...

w3x2lni技术指南:魔兽地图跨版本转换的实现与实践

w3x2lni技术指南&#xff1a;魔兽地图跨版本转换的实现与实践 【免费下载链接】w3x2lni 魔兽地图格式转换工具 项目地址: https://gitcode.com/gh_mirrors/w3/w3x2lni 技术原理&#xff1a;跨版本转换的底层架构 w3x2lni作为魔兽地图格式转换的专业工具&#xff0c;其核…...

OpenCV实战:用Python+SIFT+八点算法搞定双目视觉匹配(附完整代码)

OpenCV实战&#xff1a;PythonSIFT八点算法实现双目视觉精准匹配 在计算机视觉领域&#xff0c;立体匹配是一个经典而富有挑战性的问题。想象一下&#xff0c;当你用双眼观察世界时&#xff0c;大脑能自动计算出物体的距离——这正是双目视觉系统要模拟的过程。本文将带你用Pyt…...

别再乱改文件夹权限了!深入理解IIS应用程序池标识与ASP.NET临时目录的权限管理

深入解析IIS应用程序池权限管理&#xff1a;从临时目录到生产环境的最佳实践 当你在IIS中部署ASP.NET应用时&#xff0c;是否遇到过这样的错误&#xff1a;"当前标识(IIS APPPOOL\DefaultAppPool)没有对Temporary ASP.NET Files的写访问权限"&#xff1f;这个看似简单…...

OpenClaw安全实践:私有化Qwen3-VL:30B保障敏感数据不出境

OpenClaw安全实践&#xff1a;私有化Qwen3-VL:30B保障敏感数据不出境 1. 为什么我们需要私有化部署 去年处理一份法律合同时&#xff0c;我犯了一个至今心有余悸的错误——把客户保密协议上传到某公有云AI进行条款分析。虽然及时删除了文件&#xff0c;但那种"数据已脱离…...

Midjourney 图像到图像转换:真实人物与动漫的一致性与多样场景选择

Midjourney 拥有强大的图像到图像转换能力。本文将手把手教你如何在我们的 AceDataCloud 网站 上将照片切换到任何动漫场景&#xff0c;同时保持角色的一致性。 通过以下步骤&#xff0c;我们可以轻松实现角色一致性。 接下来&#xff0c;我们看一下效果&#xff0c;原始图像如…...

FireRedASR-AED-L在Windows系统的部署问题解决方案

FireRedASR-AED-L在Windows系统的部署问题解决方案 1. 引言 如果你正在Windows系统上尝试部署FireRedASR-AED-L这个强大的语音识别模型&#xff0c;可能会遇到各种让人头疼的问题。环境配置、依赖冲突、GPU兼容性——这些都是Windows环境下部署深度学习模型时常见的拦路虎。 …...

隐私保护方案:OpenClaw+GLM-4.7-Flash本地化处理敏感数据

隐私保护方案&#xff1a;OpenClawGLM-4.7-Flash本地化处理敏感数据 1. 为什么需要本地化处理敏感数据&#xff1f; 去年我帮一位做财务咨询的朋友处理季度报表时&#xff0c;遇到了一个棘手问题。他需要分析上百份包含客户银行流水、身份证号等信息的Excel文件&#xff0c;但…...