力扣-801.使序列递增的最小交换次数

本文最后更新于:2022年10月13日 晚上

题目描述

第一张图

实现

今天这个动态规划,不会,摆了.jpg
之后看了下官方题解的思路,然后照着思路写了一下代码,下面贴大体思路和代码:
思路

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def minSwap(self, nums1: List[int], nums2: List[int]) -> int:
n = len(nums1)
dp0 = [0] * n
dp1 = [1] * n
for i in range(1, n):
if nums1[i] > nums1[i - 1] and nums2[i] > nums2[i - 1] and nums1[i] > nums2[i - 1] and nums2[i] > nums1[i - 1]:
dp0[i] = min(dp0[i - 1], dp1[i - 1])
dp1[i] = min(dp0[i - 1], dp1[i - 1]) + 1
elif nums1[i] > nums2[i - 1] and nums2[i] > nums1[i - 1]:
dp0[i] = dp1[i - 1]
dp1[i] = dp0[i - 1] + 1
else:
dp0[i] = dp0[i - 1]
dp1[i] = dp1[i - 1] + 1
return min(dp0[-1], dp1[-1])

还是得多多练习动态规划呜呜


这里有一只爱丽丝

希望本文章能够帮到您~


力扣-801.使序列递增的最小交换次数
https://map1e-g.github.io/2022/10/11/leetcode-801/
作者
MaP1e-G
发布于
2022年10月11日
许可协议