ARTS Week 20

Algorithm 本周的算法题为 1222. 可以攻击国王的皇后 在一个 下标从 0 开始 的 8 x 8 棋盘上,可能有多个黑皇后和一个白国王。 给你一个二维整数数组 queens,其中 queens[i] = [xQueeni, yQueeni] 表示第 i 个黑皇后在棋盘上的位置。还给你一个长度为 2 的整数数组 king,其中 king = [xKing, yKing] 表示白国王的位置。 返回 能够直接攻击国王的黑皇后的坐标。你可以以 任何顺序 返回答案。 示例 1: 输入:queens = [[0,1],[1,0],[4,0],[0,4],[3,3],[2,4]], king = [0,0] 输出:[[0,1],[1,0],[3,3]] 解释:上面的图示显示了三个可以直接攻击国王的皇后和三个不能攻击国王的皇后(用红色虚线标记)。 实现代码如下: var queensAttacktheKing = function(queens, king) { // 初始化棋盘 const board = Array.from({ length: 8 }, () => Array.from({ length: 8 }, () => null)); // 将皇后的位置标记在棋盘上 queens....

2024-03-09 · 2 分钟 · 214 字

ARTS Week 19

Algorithm 本周的算法题为 661. 图片平滑器 图像平滑器 是大小为 3 x 3 的过滤器,用于对图像的每个单元格平滑处理,平滑处理后单元格的值为该单元格的平均灰度。 每个单元格的 平均灰度 定义为:该单元格自身及其周围的 8 个单元格的平均值,结果需向下取整。(即,需要计算蓝色平滑器中 9 个单元格的平均值)。 如果一个单元格周围存在单元格缺失的情况,则计算平均灰度时不考虑缺失的单元格(即,需要计算红色平滑器中 4 个单元格的平均值)。 给你一个表示图像灰度的 m x n 整数矩阵 img ,返回对图像的每个单元格平滑处理后的图像 。 示例 1: 输入:img = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[0, 0, 0],[0, 0, 0], [0, 0, 0]] 解释: 对于点 (0,0), (0,2), (2,0), (2,2): 平均(3/4) = 平均(0.75) = 0 对于点 (0,1), (1,0), (1,2), (2,1): 平均(5/6) = 平均(0.83333333) = 0 对于点 (1,1): 平均(8/9) = 平均(0.88888889) = 0 实现代码如下:...

2024-03-02 · 2 分钟 · 271 字

ARTS Week 18

Algorithm 本周的算法题为 485. 最大连续 1 的个数 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 实现代码如下: const findMaxConsecutiveOnes = function (nums) { // 数组转换为字符串 const str = nums.join('') // 如果不存在0,则直接返回数组长度即可 if (str.indexOf('0') === -1) { return nums.length } // 如果不存在1,则直接返回0 if (str.indexOf('1') === -1) { return 0 } // 通过0切割为各字符串数组 const arr = nums.join('').split('0') // 通过比较字符长度,从长到短排序,然后获取索引为0,即可获取最大连续1的个数的值 const maxValue = arr.sort(function (a, b) { return b....

2024-02-28 · 1 分钟 · 139 字

ARTS Week 17

Algorithm 本周的算法题为 989. 数组形式的整数加法 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。 例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。 示例 1: 输入:num = [1,2,0,0], k = 34 输出:[1,2,3,4] 解释:1200 + 34 = 1234 实现代码如下: var addToArrayForm = function (num, k) { var numStr = '' var outStr = '' var outNum = [] for (let i = 0; i < num....

2024-02-26 · 1 分钟 · 147 字

ARTS Week 16

Algorithm 本周的算法题为 999. 可以被一步捕获的棋子数 在一个 8 x 8 的棋盘上,有一个白色的车(Rook),用字符 'R' 表示。棋盘上还可能存在空方块,白色的象(Bishop)以及黑色的卒(pawn),分别用字符 '.','B' 和 'p' 表示。不难看出,大写字符表示的是白棋,小写字符表示的是黑棋。 车按国际象棋中的规则移动。东,西,南,北四个基本方向任选其一,然后一直向选定的方向移动,直到满足下列四个条件之一: 棋手选择主动停下来。 棋子因到达棋盘的边缘而停下。 棋子移动到某一方格来捕获位于该方格上敌方(黑色)的卒,停在该方格内。 车不能进入/越过已经放有其他友方棋子(白色的象)的方格,停在友方棋子前。 你现在可以控制车移动一次,请你统计有多少敌方的卒处于你的捕获范围内(即,可以被一步捕获的棋子数)。 输入:[ [".",".",".",".",".",".",".","."], [".",".",".","p",".",".",".","."], [".",".",".","R",".",".",".","p"], [".",".",".",".",".",".",".","."], [".",".",".",".",".",".",".","."], [".",".",".","p",".",".",".","."], [".",".",".",".",".",".",".","."], [".",".",".",".",".",".",".","."] ] 输出:3 解释:在本例中,车能够捕获所有的卒。 实现代码如下: var numRookCaptures = function (board) { var x = 0 var y = 0 // 定义标记outer,用于break中止外层for循环,结束获取R位置的流程。 outer: for (let i = 0; i < board.length; i++) { for (let j = 0; j < board[i].length; j++) { if (board[i][j] == 'R') { x = j y = i break outer } } } let count = 0 for (let i = x; i >= 0; i--) { if (board[y][i] === 'B') { break } if (board[y][i] === 'p') { count += 1 break } } for (let i = x; i < 8; i++) { if (board[y][i] === 'B') { break } if (board[y][i] === 'p') { count += 1 break } } for (let i = y; i >= 0; i--) { if (board[i][x] === 'B') { break } if (board[i][x] === 'p') { count += 1 break } } for (let i = y; i < 8; i++) { if (board[i][x] === 'B') { break } if (board[i][x] === 'p') { count += 1 break } } return count } 解题思路:...

2024-02-02 · 2 分钟 · 238 字