2133. 检查是否每一行每一列都包含全部整数
思路:先遍历子数组指定下标,放入临时数组中,用set元素唯一特性判断临时数组和当前子数组中是否包含所有元素。
var checkValid = function (matrix) {
let len = matrix.length;
for (let j = 0; j < len; j++) {
let arr = [];
for (let i = 0; i < len; i++) {
if (new Set(matrix[i]).size != len) {
return false;
}
arr.push(matrix[i][j]);
}
if (new Set(arr).size != len) {
return false;
}
}
return true;
};
2134. 最少交换次数来组合所有的 1 II
思路:滑动窗口,先统计1的个数,当窗口内0的个数最小时,就是最小的交换次数,需要注意的时,这个数组首位相连,所以要先链接出一个新数组。
var minSwaps = function (nums) {
const len = nums.length;
let window = 0;
const arr = nums.concat(nums);
for (let num of nums) {
if (num === 1) window++;
}
let res = window, ans = 0;
for (let i = 0; i < 2 * len; i++) {
if (arr[i] === 0) ans++;
if (i >= window - 1) {
res = Math.min(res, ans);
if (arr[i - window + 1] === 0) ans--;
}
}
return res;
};