当前位置: 首页 > 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.执行结果

http://www.lryc.cn/news/2387459.html

相关文章:

  • 三轴云台之积分分离PID控制算法篇
  • 【Elasticsearch】scripted_upsert
  • uv - 一个现代化的项目+环境管理工具
  • 经典密码学和现代密码学的结构及其主要区别(2)维吉尼亚密码—附py代码
  • Elasticsearch 节点角色详解及协调节点请求策略
  • 视频逐帧提取图片的工具
  • 数据结构第1章编程基础 (竟成)
  • 互联网大厂Java求职面试:AI大模型与云原生架构融合中的挑战
  • msql的乐观锁和幂等性问题解决方案
  • Python 实现桶排序详解
  • 大模型(5)——编码器(Encoder)、解码器(Decoder)
  • Web3怎么本地测试连接以太坊?
  • Vue-02 (使用不同的 Vue CLI 插件)
  • 理解vue-cli 中进行构建优化
  • 理解计算机系统_线程(九):线程安全问题
  • vue3基本类型和对象类型的响应式数据
  • 3.8.4 利用RDD实现分组排行榜
  • python web flask专题-Flask入门指南:从安装到核心功能详解
  • C语言中的“类框架”工具
  • 【HW系列】—web组件漏洞(Strtus2和Apache Log4j2)
  • 第六十八篇 从“超市收银系统崩溃”看JVM性能监控与故障定位实战
  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • 有铜半孔的设计规范与材料创新
  • 机器学习知识体系:从“找规律”到“做决策”的全过程解析
  • STM32之FreeRTOS移植(重点)
  • 做好测试用例设计工作的关键是什么?
  • R语言科研编程-标准偏差柱状图
  • 未来教育考试答题软件4.0【自用链接备份】
  • OpenGL Chan视频学习-11 Uniforms in OpenGL
  • Flink系列文章列表