Skip to content

Commit ca3fc9b

Browse files
committed
Runtime: 1198 ms (Top 36.1%) | Memory: 149.20 MB (Top 27.6%)
1 parent 0b27bd8 commit ca3fc9b

File tree

1 file changed

+18
-42
lines changed

1 file changed

+18
-42
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,24 @@
1+
# Runtime: 1198 ms (Top 36.1%) | Memory: 149.20 MB (Top 27.6%)
2+
13
class Solution:
24
def minSwap(self, nums1: List[int], nums2: List[int]) -> int:
3-
"""
5+
dp = [[-1]*2 for i in range(len(nums1))]
46

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
912

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)
2616

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))
2920

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

Comments
 (0)