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

Leetcode 3269. 构建两个递增数组

1.题目基本信息

1.1.题目描述

给定两个只包含 0 和 1 的整数数组 nums1 和 nums2,你的任务是执行下面操作后使数组 nums1 和 nums2 中 最大 可达数字 尽可能小。

将每个 0 替换为正偶数,将每个 1 替换为正奇数。在替换后,两个数组都应该 递增 并且每个整数 至多 被使用一次。

返回执行操作后最小的最大可达数字。

1.2.题目地址

https://leetcode.cn/problems/constructing-two-increasing-arrays/description/

2.解题方法

2.1.解题思路

动态规划

2.2.解题步骤

第一步,预处理。构建nextValue函数,计算在当前最大值为val,nums数组中的值为num时,求下一个合法的最小值

第二步,状态定义。dp[i][j][0]表示在nums1[:i]和nums2[:j]的子问题中,最后填入nums1的最小最大值,dp[i][j][1]表示最后填入nums2的最小最大值。

第三步,状态初始化。默认为inf,dp[0][0]=[0,0],dp[0][j][1]=NEXT(nums2[:j]),dp[i][0][0]=NEXT(nums1[:i])(其中NEXT函数功能为求单数组合法填写到最后的最小最大值)

第四步,状态转移。dp[i][j][0]=NEXT_VALUE(min(dp[i-1][j]),nums1[i-1]),dp[i][j]=NEXT_VALUE(min(dp[i][j-1]),nums2[j-1])(其中NEXT_VALUE在已知前一个最大值和当前num的情况下,获取下一个需要填的最小值)

第五步,最终的min(dp[-1][-1])即为题解

3.解题代码

Python代码

class Solution:def minLargest(self, nums1: List[int], nums2: List[int]) -> int:# 思路:动态规划m, n = len(nums1), len(nums2)# 第一步,预处理。构建nextValue函数,计算在当前最大值为val,nums数组中的值为num时,求下一个合法的最小值def nextValue(val:int, num:int) -> int:if val % 2 == 0:if num == 0:return val + 2else:return val + 1else:if num == 0:return val + 1else:return val + 2# 第二步,状态定义。dp[i][j][0]表示在nums1[:i]和nums2[:j]的子问题中,最后填入nums1的最小最大值,dp[i][j][1]表示最后填入nums2的最小最大值。dp = [[[inf, inf] for _ in range(n + 1)] for _ in range(m + 1)]# 第三步,状态初始化。默认为inf,dp[0][0]=[0,0],dp[0][j][1]=NEXT(nums2[:j]),dp[i][0][0]=NEXT(nums1[:i])(其中NEXT函数功能为求单数组合法填写到最后的最小最大值)dp[0][0] = [0, 0]for j in range(1, n + 1):dp[0][j][1] = nextValue(min(dp[0][j - 1]), nums2[j - 1])for i in range(1, m + 1):dp[i][0][0] = nextValue(min(dp[i - 1][0]), nums1[i - 1])# print(dp)# 第四步,状态转移。dp[i][j][0]=NEXT_VALUE(min(dp[i-1][j]),nums1[i-1]),dp[i][j]=NEXT_VALUE(min(dp[i][j-1]),nums2[j-1])(其中NEXT_VALUE在已知前一个最大值和当前num的情况下,获取下一个需要填的最小值)for i in range(1, m + 1):for j in range(1, n + 1):dp[i][j][0] = nextValue(min(dp[i - 1][j]), nums1[i - 1])dp[i][j][1] = nextValue(min(dp[i][j - 1]), nums2[j - 1])# 第五步,最终的min(dp[-1][-1])即为题解return min(dp[m][n])

4.执行结果

相关文章:

Leetcode 3269. 构建两个递增数组

1.题目基本信息 1.1.题目描述 给定两个只包含 0 和 1 的整数数组 nums1 和 nums2,你的任务是执行下面操作后使数组 nums1 和 nums2 中 最大 可达数字 尽可能小。 将每个 0 替换为正偶数,将每个 1 替换为正奇数。在替换后,两个数组都应该 递…...

三轴云台之积分分离PID控制算法篇

一、核心原理 积分分离PID控制的核心在于动态调整积分项的作用,以解决传统PID在三轴云台应用中的超调、振荡问题: 大误差阶段(如云台启动或快速调整时): 关闭积分项,仅使用比例(P)…...

【Elasticsearch】scripted_upsert

在 Elasticsearch 中,scripted_upsert 是一个用于更新操作的参数,它允许在文档不存在时通过脚本初始化文档内容,而不是直接使用 upsert 部分的内容。这种方式提供了更灵活的文档创建和更新逻辑。 scripted_upsert 的工作原理 当设置 scripte…...

uv - 一个现代化的项目+环境管理工具

参考: 【uv】Python迄今最好的项目管理环境管理工具(吧?)_哔哩哔哩_bilibili 项目需求 想象,每次创建一个项目的时候,我们需要去写 README. md, .git 仓库, .gitignore,你会感觉很头大 对于 …...

经典密码学和现代密码学的结构及其主要区别(2)维吉尼亚密码—附py代码

Vigenre cipher 维吉尼亚密码 维吉尼亚密码由布莱斯德维吉尼亚在 16 世纪发明,是凯撒密码的一个更复杂的扩展。它是一种多字母替换密码,使用一个关键字来确定明文中不同字母的多个移位值。 与凯撒密码不同,凯撒密码对所有字母都有固定的偏移…...

Elasticsearch 节点角色详解及协调节点请求策略

引言 Elasticsearch 集群中的节点可以承担多种角色,如主节点、数据节点、预处理节点和协调节点。合理配置和理解这些节点角色,对于保障集群的高可用性、性能优化以及请求调度至关重要。本文将深入解析各类节点的职责与配置方式,并介绍如何通…...

视频逐帧提取图片的工具

软件功能:可以将视频逐帧提取图片,可以设置每秒提取多少帧,选择提取图片质量测试环境:Windows 10软件设置:由于软件需要通过FFmpeg提取图片,运行软件前请先设置FFmpeg,具体步骤 1. 请将…...

数据结构第1章编程基础 (竟成)

第 1 章 编程基础 1.1 前言 因为数据结构的代码大多采用 C 语言进行描述。而且,408 考试每年都有一道分值为 13 - 15 的编程题,要求使用 C/C 语言编写代码。所以,本书专门用一章来介绍 408 考试所需的 C/C 基础知识。有基础的考生可以快速浏览…...

互联网大厂Java求职面试:AI大模型与云原生架构融合中的挑战

互联网大厂Java求职面试:AI大模型与云原生架构融合中的挑战 在互联网大厂的Java求职面试中,面试官往往以技术总监的身份,针对候选人对AI、大模型应用集成、云原生和低代码等新兴技术的理解与实践能力进行考察。以下是一个典型的面试场景&…...

msql的乐观锁和幂等性问题解决方案

目录 1、介绍 2、乐观锁 2.1、核心思想 2.2、实现方式 1. 使用 version 字段(推荐) 2. 使用 timestamp 字段 2.3、如何处理冲突 2.4、乐观锁局限性 3、幂等性 3.1、什么是幂等性 3.2、乐观锁与幂等性的关系 1. 乐观锁如何辅助幂等性&#xf…...

Python 实现桶排序详解

1. 核心原理 桶排序是一种非比较型排序算法,通过将数据分配到多个“桶”中,每个桶单独排序后再合并。其核心步骤包括: 分桶:根据元素的范围或分布,将数据分配到有限数量的桶中。桶内排序:对每个非空桶内的…...

大模型(5)——编码器(Encoder)、解码器(Decoder)

文章目录 一、编码器(Encoder)1. 核心作用2. 典型结构(以Transformer为例)3. 应用场景 二、解码器(Decoder)1. 核心作用2. 典型结构(以Transformer为例)3. 应用场景 三、编码器与解码…...

Web3怎么本地测试连接以太坊?

ETHEREUM_RPC_URLhttps://sepolia.infura.io/v3/你的_INFURA_API_KEY 如果你没有 Infura Key,注册 Infura 或 Alchemy,拿一个免费测试网节点就行: Infura:https://infura.io Alchemy:Alchemy - the web3 developme…...

Vue-02 (使用不同的 Vue CLI 插件)

使用不同的 Vue CLI 插件 Vue CLI 插件扩展了 Vue 项目的功能,让你可以轻松集成 TypeScript、Vuex、路由等功能。它们可以自动进行配置和设置,从而节省您的时间和精力。了解如何使用这些插件对于高效的 Vue 开发至关重要。 了解 Vue CLI 插件 Vue CLI…...

理解vue-cli 中进行构建优化

在 Vue CLI 项目中进行构建优化,是前端性能提升的重要手段。它涉及到 Webpack 配置、代码分包、懒加载、依赖优化、图片压缩等多个方面。 🧱 基础构建优化 设置生产环境变量 NODE_ENVproduction Vue CLI 会自动在 npm run build 时开启以下优化&…...

理解计算机系统_线程(九):线程安全问题

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#xff0c;对程序的整个过程进行梳理。本书内容对整个计算机系统做了系统性导引,每部分内容都是单独的一门课.学习深度根据自己需要来定 引入 接续理解计算机系统_线程(八):并行-CSDN博客,内容包括12.7…...

vue3基本类型和对象类型的响应式数据

vue3中基本类型和对象类型的响应式数据 OptionsAPI与CompstitionAPI的区别 OptionsAPI Options API • 特点&#xff1a;基于选项&#xff08;options&#xff09;来组织代码&#xff0c;将逻辑按照生命周期、数据、方法等分类。• 结构&#xff1a;代码按照 data 、 methods…...

3.8.4 利用RDD实现分组排行榜

本实战任务通过Spark RDD实现学生成绩的分组排行榜。首先&#xff0c;准备包含学生成绩的原始数据文件&#xff0c;并将其上传至HDFS。接着&#xff0c;利用Spark的交互式环境或通过创建Maven项目的方式&#xff0c;读取HDFS中的成绩文件生成RDD。通过map操作将数据映射为二元组…...

python web flask专题-Flask入门指南:从安装到核心功能详解

Flask入门指南&#xff1a;从安装到核心功能详解 Flask作为Python最流行的轻量级Web框架之一&#xff0c;以其简洁灵活的特性广受开发者喜爱。本文将带你从零开始学习Flask&#xff0c;涵盖安装配置、项目结构、应用实例、路由系统以及请求响应处理等核心知识点。 1. Flask安…...

C语言中的“类框架”工具

C语言中的“框架”&#xff1a;库与轻量级工具生态解析 ​​一、C语言的设计哲学与框架定位​​ C语言作为一门​​系统级编程语言​​&#xff0c;核心目标是提供​​高效、灵活​​的底层控制能力。与Java、Python等高级语言不同&#xff0c;C语言本身​​不内置全栈框架​​…...

【HW系列】—web组件漏洞(Strtus2和Apache Log4j2)

本文仅用于技术研究&#xff0c;禁止用于非法用途。 文章目录 Struts2Struts2 框架介绍Struts2 历史漏洞汇总&#xff08;表格&#xff09;Struts2-045 漏洞详解 Log4j2Log4j2 框架介绍Log4j2 漏洞原理1. JNDI 注入2. 利用过程 Log4j2 历史漏洞JNDILDAP 反弹 Shell 流程 Strut…...

第六十八篇 从“超市收银系统崩溃”看JVM性能监控与故障定位实战

目录 引言&#xff1a;当技术问题遇上生活场景一、JVM的“超市货架管理哲学”二、收银员工具箱&#xff1a;JVM监控三板斧三、典型故障诊断实录四、防患于未然的运维智慧五、结语&#xff1a;从故障救火到体系化防控 引言&#xff1a;当技术问题遇上生活场景 想象一个周末的傍…...

Debian 11 之使用hostapd与dnsmasq进行AP设置

目录 1: 安装必要的软件2: 配置dnsmasq3: 配置 hostapd4: 配置网络接口5: 启动服务总结 在Debian 11&#xff08;也称为Bullseye&#xff09;下设置热点&#xff0c;你可以使用多种方法&#xff0c;但最常见和简单的方法之一是使用hostapd工具配合dnsmasq。这种方法不需要额外的…...

有铜半孔的设计规范与材料创新

设计关键参数 孔径与间距限制 最小孔径需≥0.6mm&#xff0c;孔边距≥0.5mm&#xff0c;避免铜层脱落&#xff1b;拼版时半孔区域需预留2mm间距防止撕裂。 阻焊桥设计 必须保留阻焊桥&#xff08;宽度≥0.1mm&#xff09;&#xff0c;防止焊锡流入孔内造成短路。 猎板的材料…...

机器学习知识体系:从“找规律”到“做决策”的全过程解析

你可能听说过“机器学习”&#xff0c;觉得它很神秘&#xff0c;像是让电脑自己学会做事。其实&#xff0c;机器学习的本质很简单&#xff1a;通过数据来自动建立规则&#xff0c;从而完成预测或决策任务。 这篇文章将用通俗的语言为你梳理机器学习的知识体系&#xff0c;帮助…...

STM32之FreeRTOS移植(重点)

RTOS的基本概念 实时操作系统&#xff08;Real Time Operating System&#xff09;的简称就叫做RTOS&#xff0c;是指具有实时性、能支持实时控制系统工作的操作系统&#xff0c;RTOS的首要任务就是调度所有可以利用的资源来完成实时控制任务的工作&#xff0c;其次才是提高工…...

做好测试用例设计工作的关键是什么?

测试用例设计是软件测试的核心环节,好的测试用例能高效发现缺陷,差的测试用例则可能漏测关键问题。结合多年测试经验,我认为做好测试用例设计的关键在于以下6点: 1. 深入理解需求(核心基础) ✅ 关键点: 与产品经理/开发对齐,确保理解无偏差(避免“我以为”式测试) 拆…...

R语言科研编程-标准偏差柱状图

生成随机数据 在R中&#xff0c;可以使用rnorm()生成正态分布的随机数据&#xff0c;并模拟分组数据。以下代码生成3组&#xff08;A、B、C&#xff09;随机数据&#xff0c;每组包含10个样本&#xff1a; set.seed(123) # 确保可重复性 group_A <- rnorm(10, mean50, sd…...

未来教育考试答题软件4.0【自用链接备份】

未来教育考试答题软件4.0【自用链接备份】 http://www.downyi.com/downinfo/240413.html 补丁地址:https://www.wodown.com/soft/43108.html...

OpenGL Chan视频学习-11 Uniforms in OpenGL

bilibili视频链接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站&#xff1a; docs.gl 说明&#xff1a; 1.之后就不再单独整理网站具体函数了&#xff0c;网站直接翻译…...