Leetcode 3269. 构建两个递增数组

news2025/7/19 17:57:15

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 + 2
                else:
                    return val + 1
            else:
                if num == 0:
                    return val + 1
                else:
                    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.执行结果

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

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

相关文章

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

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

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

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

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

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

视频逐帧提取图片的工具

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

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

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

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

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

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

前言 以<深入理解计算机系统>(以下称“本书”)内容为基础&#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安…

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

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

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

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

STM32之FreeRTOS移植(重点)

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

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

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

OpenGL Chan视频学习-11 Uniforms in OpenGL

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

GitLab 从 17.10 到 18.0.1 的升级指南

本文分享从 GitLab 中文本 17.10.0 升级到 18.0.1 的完整过程。 升级前提 查看当前安装实例的版本。有多种方式可以查看&#xff1a; 方式一&#xff1a; /help页面 可以直接在 /help页面查看当前实例的版本。以极狐GitLab SaaS 为例&#xff0c;在浏览器中输入 https://ji…

产业集群间的专利合作关系

需要准备的文件&#xff1a; 全国的专利表目标集群间的企业名单 根据专利的共同申请人&#xff0c;判断这两家企业之间存在专利合作关系。 利用1_filter_patent.py&#xff0c;从全国的3000多万条专利信息中&#xff0c;筛选出与目标集群企业相关的专利。 只要专利的申请人包…

KT6368A通过蓝牙芯片获取手机时间详细说明,对应串口指令举例

一、功能简介 KT6368A双模蓝牙芯片支持连接手机&#xff0c;获取手机的日期、时间信息&#xff0c;可以同步RTC时钟 1、无需安装任何app&#xff0c;直接使用系统蓝牙即可实现 2、同时它不影响音频蓝牙&#xff0c;还支持一些简单的AT指令进行操作 3、实现的方式&#xff1…

计算机网络实验课(二)——抓取网络数据包,并实现根据条件过滤抓取的以太网帧,分析帧结构

文章目录 一、添加控件二、代码分析2.1 代码2.2 控件初始化2.3 打开和关闭设备2.4 开始和结束捕获2.5 设置捕获条件2.6 捕获数据包 三、运行程序四、结果分析 提要&#xff1a;如果你通过vs打开.sln文件&#xff0c;然后代码界面或者前端界面都没找到&#xff0c;视图里面也没找…

78. Subsets和90. Subsets II

目录 78.子集 方法一、迭代法实现子集枚举 方法二、递归法实现子集枚举 方法三、根据子集元素个数分情况收集 方法四、直接回溯法 90.子集二 方法一、迭代法实现子集枚举 方法二、递归法实现子集枚举 方法三、根据子集元素个数分情况收集 方法四、直接回溯法 78.子集…