Minimum Swaps To Make Sequences Increasing LeetCode solution in C++

1
class Solution {
2
public:
3
int n;
4
vector<int> nums1, nums2;
5
int dp[200005][3];
6
int find(int index, int sp) {
7
if (index == n) {
8
return 0;
9
}
10
if (dp[index][sp] != -1) {
11
return dp[index][sp];
12
}
13
int prev1 = nums1[index - 1];
14
int prev2 = nums2[index - 1];
15
int ans = 1e8;
16
if (sp) {
17
swap(prev1, prev2);
18
}
19
if (prev1 < nums1[index] && prev2 < nums2[index]) {
20
ans = min(ans, find(index + 1, 0));
21
}
22
if (prev1 < nums2[index] && prev2 < nums1[index]) {
23
ans = min(ans, 1 + find(index + 1, 1));
24
}
25
return dp[index][sp] = ans;
26
}
27
int minSwap(vector<int> &nums1, vector<int> &nums2) {
28
memset(dp, -1, sizeof(dp));
29
nums1.insert(nums1.begin(), -1);
30
nums2.insert(nums2.begin(), -1);
31
n = nums1.size();
32
this->nums1 = nums1;
33
this->nums2 = nums2;
34
return find(1, 0);
35
}
36
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0