| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【LeetCode成长系列(动态规划状态机DP困难题)】801. 使序列递增的最小交换次数 -> 正文阅读 |
|
[数据结构与算法]【LeetCode成长系列(动态规划状态机DP困难题)】801. 使序列递增的最小交换次数 |
??前面的话?? 本篇文章介绍一道动态规划状态机DP困难题【801. 使序列递增的最小交换次数】题解,难度为:困难 标签:动态规划 多状态(状态机DP)
??801. 使序列递增的最小交换次数??🔐题目详情难度困难 我们有两个长度相等且不为空的整型数组
返回 使 数组 注意:
示例 1:
示例 2:
提示:
💡解题思路基本思路: 动态规划 解题思路: 本题采用双状态动态规划即可解决,首先题目要求的就是将两个数组相同下标的元素进行交换,所以我们仅需要考虑交换前后数组元素大小的关系即可。 状态定义: d p [ i ] [ j ] dp[i][j] dp[i][j] 表示 [ 0 , i ] [0,i] [0,i]下标内数组最小交换次数,其中 j j j表示状态, 0 0 0表示不交换, 1 1 1表示交换。 确定初始状态: d p [ 0 ] [ 0 ] = 0 , d p [ 0 ] [ 1 ] = 1 dp[0][0] = 0,dp[0][1] = 1 dp[0][0]=0,dp[0][1]=1, 其他状态置为 d p [ i ] [ 0 ] = d p [ i ] [ 1 ] = n + 1 dp[i][0] = dp[i][1] = n + 1 dp[i][0]=dp[i][1]=n+1(交换次数最多为 n n n)。 状态转移方程: 即: 另外一种情况就是:第一个数组后一个元素大于第二个数组前一个元素,第二个数组后一个元素大于第一个数组前一个元素,即 此时交换 i i i位置元素 或者交换 i ? 1 i-1 i?1位置元素,由于该情况可能与上一种情况同时出现,所以我们取两者较小值。
i
i
i位置交换
d
p
[
i
]
[
1
]
=
m
i
n
(
d
p
[
i
]
[
1
]
,
d
p
[
i
?
1
]
[
0
]
+
1
)
dp[i][1] = min(dp[i][1], dp[i-1][0] + 1)
dp[i][1]=min(dp[i][1],dp[i?1][0]+1) 最终较小交换次数为两个状态中较小的值,即 m i n ( d p [ n ? 1 ] [ 0 ] , d p [ n ? 1 ] [ 1 ] ) min(dp[n-1][0], dp[n-1][1]) min(dp[n?1][0],dp[n?1][1]) 滚动数组优化: 为了防止污染第 满足 满足 此时交换 i i i位置元素 或者交换 i ? 1 i-1 i?1位置元素,由于该情况可能与上一种情况同时出现,所以我们取两者较小值。
i
i
i位置交换
b
=
m
i
n
(
b
,
d
p
[
p
r
e
]
[
0
]
+
1
)
b = min(b, dp[pre][0] + 1)
b=min(b,dp[pre][0]+1) 最后再正式更新第 最终最小交换次数为交换与不交换状态较小的值 m i n ( d p [ ( n ? 1 ) & 1 ] [ 0 ] , d p [ ( n ? 1 ) & 1 ] [ 1 ] ) min(dp[(n-1)\&1][0], dp[(n-1)\&1][1]) min(dp[(n?1)&1][0],dp[(n?1)&1][1])。 🔑源代码
滚动数组优化:
🌱总结本题为动态规划双状态运用题,状态转移的过程中【交换】状态需要利用到【非交换状态】,通过两个状态数组相互转移,达到状态转移的目的。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 19:54:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |