ARTS Week 15

Algorithm 本周的算法题为 566. 重塑矩阵 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。 重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。 如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。 输入:mat = [[1,2],[3,4]], r = 1, c = 4 输出:[[1,2,3,4]] 实现代码如下: var matrixReshape = function (mat, r, c) { let allNums = [] for (let i = 0; i < mat.length; i++) { for (let j = 0; j < mat[i]....

2024-01-22 · 1 分钟 · 140 字

ARTS Week 14

Algorithm 本周的算法题为 1450. 在既定时间做作业的学生人数 给你两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间。 已知,第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。 请返回在查询时间 queryTime 时正在做作业的学生人数。形式上,返回能够使 queryTime 处于区间 [startTime[i], endTime[i]](含)的学生人数。 示例 1: 输入:startTime = [1,2,3], endTime = [3,2,7], queryTime = 4 输出:1 解释:一共有 3 名学生。 第一名学生在时间 1 开始写作业,并于时间 3 完成作业,在时间 4 没有处于做作业的状态。 第二名学生在时间 2 开始写作业,并于时间 2 完成作业,在时间 4 没有处于做作业的状态。 第三名学生在时间 3 开始写作业,预计于时间 7 完成作业,这是是唯一一名在时间 4 时正在做作业的学生。 实现代码如下: var busyStudent = function (startTime, endTime, queryTime) { let doHomeworkCount = 0 for (let i = 0; i < startTime....

2024-01-18 · 1 分钟 · 171 字

ARTS Week 13

Algorithm 本周的算法题为 896. 单调数列 如果数组是单调递增或单调递减的,那么它是 单调 的。 如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。 当给定的数组 nums 是单调数组时返回 true,否则返回 false。 示例 1: 输入:nums = [1,2,2,3] 输出:true 实现代码如下: var isMonotonic = function (nums) { var isIncreasing = true var isDecreasing = true for (let i = 0; i < nums.length - 1; i++) { if (!(nums[i] <= nums[i + 1])) { isIncreasing = false break } } for (let i = 0; i < nums....

2024-01-16 · 1 分钟 · 141 字

ARTS Week 12

Algorithm 本周的算法题为 1572. 矩阵对角线元素的和 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 输入:mat = [[1,2,3], [4,5,6], [7,8,9]] 输出:25 解释:对角线的和为:1 + 5 + 9 + 3 + 7 = 25 请注意,元素 mat[1][1] = 5 只会被计算一次。 实现代码如下: var diagonalSum = function (mat) { // 设置总和值 let sumValue = 0 for (let i = 0; i < mat.length; i++) { // 遍历相加 sumValue = sumValue + mat[i][i] + mat[i][mat.length - 1 - i] } // 如果mat长度是奇数,会出现中心值相加两次的情况,所以这里要减去一次。 if (mat.length % 2 == 1) { // 获取数组中间下标值,减去1除以2加上1就是中间值,但是因为下标是0开始的,所以减去1 let coreIndex = ((mat....

2024-01-11 · 1 分钟 · 152 字

ARTS Week 11

Algorithm 本周的算法题为 867. 转置矩阵 给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。 矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]] 实现代码如下: var transpose = function (matrix) { var resultArr = [] for (let i = 0; i < matrix.length; i++) { for (let j = 0; j < matrix[i].length; j++) { // 如果是undefined,则赋值[] if (!resultArr[j]) { resultArr[j] = [] } resultArr[j].push(matrix[i][j]) } } return resultArr } 解题思路: 从示例1可以看出,转置前后的数据,其实是有规律可循的,所求的二维数组,其实就是转置前,每个子元素数组同下标的集合,示例1中的147分别是matrix中各子元素数组下标为0的值,以此类推,使用两个for循环得到结果。 Review Scientists ’talk’ with a whale for 20 minutes...

2024-01-04 · 1 分钟 · 115 字