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

科学家表示,他们与一头鲸鱼进行了一次“对话”。他们还表示,这种聊天可以帮助他们有朝一日与外星人交谈。这些科学家来自加州大学、阿拉斯加鲸鱼基金会和SETI(搜寻外星智慧)。这三个组织联合起来,与一头名叫吐温的座头鲸交谈。他们用“座头鲸语言”和她交谈了20分钟。他们的对话发生在科学家们向阿拉斯加海岸外的海洋发送“联系电话”之后。吐温听到了呼唤,做出了回应。她游到考察船边聊天。SETI表示,这是人类和座头鲸之间的第一次交流。

科学家们说,他们与吐温的对话并不深刻。布伦达·麦考恩教授说,这更像是一系列的问候。鲸鱼使用联络呼叫让其他鲸鱼知道它们在哪里。科学家们在20分钟内发起了36次同样的呼叫。每一次,吐温都做出了回应。她甚至匹配了研究人员每一次呼叫的间隔时间。麦考恩教授告诉《商业内幕》网站,她的研究可以让与外星人交谈变得更容易。她说:“这个星球上有各种各样的智能体。通过研究它们,我们可以更好地了解外星人可能是什么样子的,因为它们不会完全同我们一样。”

Tip

switch 和 if else 哪个效率高

在大多数情况下,switch 语句的效率通常比 if else 语句要高。这是因为 switch 语句使用了跳转表来查找符合条件的分支,而不是逐个比较条件。跳转表实际上是一个数组,通过将条件值作为索引,可以直接访问到对应的目标地址。因此,跳转表的查找方式具有固定的时间复杂度 O(1),无论有多少个分支,查找时间都是恒定的。

相比之下,if else 语句需要逐个比较条件,如果有多个条件,它的查找时间将随着条件数量和复杂度的增加而增加。在最坏的情况下,if else 语句的时间复杂度可能达到 O(n),其中 n 是分支的数量。

然而,在实际应用中,仍然需要根据具体的场景来选择使用 switch 还是 if else。如果条件是固定的值,且分支数量较多,建议使用 switch 语句。如果条件是动态的,并且需要进行更复杂的条件判断,建议使用 if else 语句。

Share

总是有人要赢的,那为什么不能是我呢? —— 科比·布莱恩特