Daily LeetCode – day0073 0801. Minimum Swaps To Make Sequences Increasing

// 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的幂次会不会快一点。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注