801. Minimum Swaps To Make Sequences Increasing
https://leetcode.com/problems/minimum-swaps-to-make-sequences-increasing/description/
/*
* @lc app=leetcode id=801 lang=cpp
*
* [801] Minimum Swaps To Make Sequences Increasing
*/
class Solution {
public:
int minSwap(vector<int>& A, vector<int>& B) {
const int N = A.size();
vector<int> keep(N, INT_MAX), swap(N, INT_MAX);
keep[0] = 0;
swap[0] = 1;
for (int i = 1; i < N; ++i) {
if (A[i] > A[i - 1] && B[i] > B[i - 1]) {
keep[i] = keep[i - 1];
// i和i-1都swap
swap[i] = swap[i - 1] + 1;
}
if (B[i] > A[i - 1] && A[i] > B[i - 1]) {
// swap i
swap[i] = min(swap[i], keep[i - 1] + 1);
// swap i - 1.
keep[i] = min(keep[i], swap[i - 1]);
}
}
return min(keep.back(), swap.back());
}
};
Last updated