Press "Enter" to skip to content

花花酱 LeetCode 801. Minimum Swaps To Make Sequences Increasing

Problem

题目大意:给你两个数组A, B。问最少需要多少次对应位置元素的交换才能使得A和B变成单调递增。

https://leetcode.com/problems/minimum-swaps-to-make-sequences-increasing/description/

We have two integer sequences A and B of the same non-zero length.

We are allowed to swap elements A[i] and B[i].  Note that both elements are in the same index position in their respective sequences.

At the end of some number of swaps, A and B are both strictly increasing.  (A sequence is strictly increasing if and only if A[0] < A[1] < A[2] < ... < A[A.length - 1].)

Given A and B, return the minimum number of swaps to make both sequences strictly increasing.  It is guaranteed that the given input always makes it possible.

Example:
Input: A = [1,3,5,4], B = [1,2,3,7]
Output: 1
Explanation: 
Swap A[3] and B[3].  Then the sequences are:
A = [1, 3, 5, 7] and B = [1, 2, 3, 4]
which are both strictly increasing.

Note:

  • A, B are arrays with the same length, and that length will be in the range [1, 1000].
  • A[i], B[i] are integer values in the range [0, 2000].

 

Solution: Search/DFS (TLE)

Time complexity: O(2^n)

Space complexity: O(n)

C++


 

 

Solution: DP

Time complexity: O(n)

Space complexity: O(n)

C++

Python3

请尊重作者的劳动成果,转载请注明出处!花花保留对文章/视频的所有权利。
如果您喜欢这篇文章/视频,欢迎您捐赠花花。
If you like my articles / videos, donations are welcome.

Buy anything from Amazon to support our website
您可以通过在亚马逊上购物(任意商品)来支持我们

Paypal
Venmo
huahualeetcode
微信打赏

One Comment

  1. koala koala May 13, 2018

    DP的题每次总是差一点。这道题可以想到DFS,想到继续优化应该用DP。但是DP递推式确却想不出来最后正确的,这道题比如得考虑两个元素之间的关系。希望楼主大神可以分享下这个公式如何由一些经验去推导去思考。
    自己总结了常见一维,二维,常见字符串,区间DP,DFS+记忆存储,不过碰到新题有些还是一时半会想不出来。
    谢谢楼主的视频,讲解非常清晰。

Leave a Reply