// 0801. Minimum Swaps To Make Sequences Increasing
class Solution {
public int minSwap(int[] nums1, int[] nums2) {
int n = nums1.length;
int currentNoSwap = 0;
int currentSwap = 1;
for (int i = 1; i < n; ++i) {
int previousNoSwap = currentNoSwap;
int previousSwap = currentSwap;
currentNoSwap = 131072;
currentSwap = 131072;
if (nums1[i] > nums1[i - 1] && nums2[i] > nums2[i - 1]) {
currentNoSwap = previousNoSwap;
currentSwap = previousSwap + 1;
}
if (nums1[i] > nums2[i - 1] && nums2[i] > nums1[i - 1]) {
currentNoSwap = Math.min(currentNoSwap, previousSwap);
currentSwap = Math.min(currentSwap, previousNoSwap + 1);
}
}
return Math.min(currentNoSwap, currentSwap);
}
}
学习笔记:
这是一道动态规划的题目,有一点困难。
有三种情况,
第一种是可以换,换了也行,不换也行。
第二种是必须换,不换就不行了。
第三种是不能换,换了就不行了。
可以根据条件来计算换和不换最小交换次数。
说是不会大于100000,所以就写了个131072来比较,不知道2的幂次会不会快一点。