1
+ # Runtime: 1198 ms (Top 36.1%) | Memory: 149.20 MB (Top 27.6%)
2
+
1
3
class Solution :
2
4
def minSwap (self , nums1 : List [int ], nums2 : List [int ]) -> int :
3
- """
5
+ dp = [[ - 1 ] * 2 for i in range ( len ( nums1 ))]
4
6
5
-
6
- q. is there a greedy wat to know tht shall i switch or not?
7
- a.
8
- [1, 3, 6] [1, 4, 4]
7
+ def solve (prev1 , prev2 , i , swaped ):
8
+ if i >= len (nums1 ): return 0
9
+ if dp [i ][swaped ] != - 1 : return dp [i ][swaped ]
10
+
11
+ ans = 2 ** 31
9
12
10
- at i=1, we cannot greedily determine about switching.. we need lookahead, i.e DP
11
-
12
- at each (i) we have a choice
13
- if its currently not increasing:
14
- we have to see if switching will make it increasing
15
- else:
16
- we can move to i+1 since its already incr
17
- OR
18
- if switch is possible, we switch and cont.
19
-
20
- possible complexity:
21
- dp(i, prev1, prev2) :
22
- """
23
-
24
- @cache
25
- def dp (i , preva , prevb ):
13
+ # No Swap
14
+ if nums1 [i ] > prev1 and nums2 [i ] > prev2 :
15
+ ans = solve (nums1 [i ], nums2 [i ], i + 1 , 0 )
26
16
27
- if i == len (nums1 ):
28
- return 0
17
+ # Swap
18
+ if nums1 [i ] > prev2 and nums2 [i ] > prev1 :
19
+ ans = min (ans , 1 + solve (nums2 [i ], nums1 [i ], i + 1 , 1 ))
29
20
30
- if nums1 [i ] > preva and nums2 [i ] > prevb :
31
- # we are increasing as is, we have 2 choices now, make swap if possible else dont
32
- if nums1 [i ] > prevb and nums2 [i ] > preva :
33
- # switch is also possible
34
- return min (
35
- 1 + dp (i + 1 , nums2 [i ], nums1 [i ]),
36
- dp (i + 1 , nums1 [i ], nums2 [i ])
37
- )
38
- else :
39
- return dp (i + 1 , nums1 [i ], nums2 [i ])
40
- else :
41
- # we only have 1 choice
42
- if nums1 [i ] > prevb and nums2 [i ] > preva :
43
- # switch is possible
44
- return 1 + dp (i + 1 , nums2 [i ], nums1 [i ]) # swithced
45
- else :
46
- return inf
47
-
48
- return min (dp (1 , nums1 [0 ], nums2 [0 ]), 1 + dp (1 , nums2 [0 ], nums1 [0 ]))
21
+ dp [i ][swaped ] = ans
22
+ return ans
23
+
24
+ return solve (- 1 , - 1 , 0 , 0 )
0 commit comments