M1536.排布二进制网格的最少交换次数
greedy, matrix, https://leetcode.cn/problems/minimum-swaps-to-arrange-a-binary-grid/
思路:统计后缀零后第一个1的位置再按行冒泡检查能否满足
cpp
class Solution {
public:
int minSwaps(vector<vector<int>>& grid) {
int n = grid.size();
vector<int>col(n,-1);
for (int i = 0; i < n; i++) {
for (int j = n - 1; j >= 0; j--) {
if (grid[i][j] == 1) {
col[i] = j;
break;
}
}
}
int ans = 0, check = 0;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (col[j] <= i) {
ans += (j - i);
for (int k = j; k > i; k--)
col[k] = col[k - 1];
goto nxt;
}
}
return -1;
nxt:
;
}
return ans;
}
};