leetcode 第 275 场周赛 记录

141 阅读1分钟

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;
};