1536. 排布二进制网格的最少交换次数
状态:AC
代码:
class Solution {
public:
int minSwaps(vector<vector<int>>& grid) {
int n = grid.size();
int raw;
int ans = 0;
vector<int> arr(n,0);
for(int i = 0;i<n;i++){
raw = 0;
for(int j = n-1;j>=0;j--){
if(grid[i][j] == 0){
raw++;
}else{
break;
}
}
arr[i] = raw;
}
for(int i = 0;i<n;i++){
if(arr[i] >= n-1-i) continue;
int j;
for(j = i+1;j<n;j++){
if(j == n-1 && arr[j] < n-1-i)
return -1;
if(arr[j] >= n-1-i)
break;
}
for(;j>i;j--){
swap(arr[j],arr[j-1]);
ans++;
}
}
return ans;
}
};