其他分享
首页 > 其他分享> > [Swift]LeetCode801. 使序列递增的最小交换次数 | Minimum Swaps To Make Sequences Increasing

[Swift]LeetCode801. 使序列递增的最小交换次数 | Minimum Swaps To Make Sequences Increasing

作者:互联网

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 。

我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。

在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < ... < A[A.length - 1])。

给定数组 A 和 B ,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定的输入总是有效的。

示例:
输入: A = [1,3,5,4], B = [1,2,3,7]
输出: 1
解释: 
交换 A[3] 和 B[3] 后,两个数组如下:
A = [1, 3, 5, 7] , B = [1, 2, 3, 4]
两个数组均为严格递增的。

注意:


Runtime: 64 ms Memory Usage: 19.2 MB
 1 class Solution {
 2     func minSwap(_ A: [Int], _ B: [Int]) -> Int {
 3         var n1:Int = 0
 4         var s1:Int = 1
 5         var n:Int = A.count
 6         for i in 1..<n
 7         {
 8             var n2:Int = Int.max
 9             var s2:Int = Int.max
10             if A[i - 1] < A[i] && B[i - 1] < B[i]
11             {
12                 n2 = min(n2, n1)
13                 s2 = min(s2, s1 + 1)
14             }
15             if A[i - 1] < B[i] && B[i - 1] < A[i]
16             {
17                 n2 = min(n2, s1)
18                 s2 = min(s2, n1 + 1)
19             }
20             n1 = n2
21             s1 = s2
22         }
23         return min(n1, s1)
24     }
25 }

76ms

 1 class Solution {
 2     func minSwap(_ A: [Int], _ B: [Int]) -> Int {                
 3         var swapRecord = 1, fixRecord = 0
 4         for i in 1..<A.count {
 5             if A[i-1] >= B[i] || B[i-1] >= A[i] {
 6                 swapRecord += 1
 7             }
 8             else if A[i - 1] >= A[i] || B[i - 1] >= B[i] {
 9                 let temp = swapRecord
10                 swapRecord = fixRecord + 1
11                 fixRecord = temp
12             }
13             else {
14                 let minv = min(swapRecord, fixRecord)
15                 swapRecord = minv + 1
16                 fixRecord = minv
17             }
18         }
19         return min(swapRecord, fixRecord)
20     }
21 
22     func minSwapDP(_ A: [Int], _ B: [Int], _ i: Int, _ sum: Int) -> Int {
23 
24         if i >= A.count {
25             return sum
26         }
27 
28         if i == 0 { return minSwapDP(A, B, i+1, sum) }
29 
30         if A[i] > A[i-1] && B[i] > B[i-1] {
31             return minSwapDP(A, B, i+1, sum)
32         }
33 
34         var canSwapPre = (A[i-1] < B[i] && B[i-1] < A[i])
35         if canSwapPre {
36             for k in 0..<i-1 {
37                 if A[i-1] <= B[k] || B[i-1] <= A[k]  {
38                     canSwapPre = false
39                     break
40                 }
41             }
42         }
43         let canSwapCur = (B[i] > A[i-1] && A[i] > B[i-1])
44 
45         var A2 = A, B2 = B
46         let tmp2 = A2[i-1]
47         A2[i-1] = B2[i-1]
48         B2[i-1] = tmp2
49 
50         var A1 = A, B1 = B
51         let tmp = A1[i]
52         A1[i] = B1[i]
53         B1[i] = tmp
54         if canSwapPre && canSwapCur {
55             return min(minSwapDP(A2, B2, i, sum+1), minSwapDP(A1, B1, i+1, sum+1))
56         }
57         else if canSwapCur {
58             return minSwapDP(A1, B1, i+1, sum+1)
59         }
60         else {
61             return minSwapDP(A2, B2, i, sum+1)
62         }
63     }
64 }

 

标签:return,Swaps,Int,sum,minSwapDP,Minimum,LeetCode801,var,swapRecord
来源: https://www.cnblogs.com/strengthen/p/10547598.html