Algorithm

本周的算法题为 566. 重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。

给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 rc ,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。

如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

img

输入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].length; j++) {
            allNums.push(mat[i][j])
        }
    }
    if (allNums.length !== r * c) {
        return mat
    }
    let resultValue = []
    while (allNums.length > 0) {
        resultValue.push(allNums.splice(0, c))
    }
    return resultValue
}

解题思路:

首先,我们可以定义一个空数组allNums来存储mat矩阵中的所有元素。然后,我们需要判断allNums的长度是否等于重塑后矩阵的行数r乘以列数c。如果不相等,说明无法进行重塑操作,直接返回原始矩阵mat。如果相等,我们可以定义一个空数组result来存储重塑后的矩阵。接下来,我们可以通过列数c的值,使用数组splice(startIndex, endIndex)方法对allNums进行截取,直到allNums的长度为0。在每次截取后,将截取的部分作为一行加入resultValue数组中。完成截取后,我们可以返回resultValue作为重塑后的矩阵。一开始没看完题目描述最后一句,导致解题出现偏差。本来很简单的题目,自己想复杂了。

Review

World will see first trillionaire in next 10 years

一首著名的歌曲和一个问答节目问道:“谁想成为百万富翁?”几十年来,拥有一百万美元是超级富豪的目标。现在,目标变成了十亿美元。反贫困慈善机构乐施会刚刚发布了一份报告,称未来十年内世界将诞生第一个万亿富翁。一万亿是一个巨大的数字和难以置信的金额。它由1后面跟着12个0组成。一万亿等于一百万个一百万美元。该慈善机构表示,贫富差距正在扩大,并指出自新冠疫情爆发以来这种差距已经“被加速”。报告还说:“我们将在未来十年内产生一个万亿富翁,而要消除贫困,则需要200多年。”

乐施会在世界经济论坛的年度会议上谈到了不平等问题。作为例子,它表示自2020年以来全球最富有的五个人的财富增长了114% 。该慈善机构发言人说:“前五位亿万富翁们的财富增加了两倍。另一方面,近50亿人变得更穷。”特斯拉CEO埃隆·马斯克是地球上最富有的人。他个人身价接近2500亿美元。AP新闻社称:“如果某人真正达到那个万亿元里程碑,他或她将与油气资源丰厚的沙特阿拉伯具有相同价值。”乐施会表示现在世界正处于“分裂之初”,呼吁开启“公共行动新时代”以缩小财富差距。

注:作为快船队小卡球迷,不得不说,这两年快船老板鲍尔默确实赚麻了。14EE39EE

Tip

使用npm install package@latest 时,安装的是V1.6.0还是V1.6.1-beta ?

在部门搭建私有npm仓库,对一些组件库和工具库进行管理,但是出现有同事使用package@latest下载到了beta版本,研究了npm发包机制知道问题出在哪里,因为在发布版本时,都是使用npm publish命令的,所以事实上V1.6.0-beta只是名称改为了-beta而已,要解决这个问题,后续beta版本发布时,需要使用命令npm publish --tag beta。官方文档如下Adding dist-tags to packages | npm Docs (npmjs.com)

Share

奥卡姆的剃刀定律:在诸多相互竞争的理论中,选择假设最小的,也即最简单的可能就是最正确的,切勿浪费较多东西去做那些用较少东西同样可以做好的事情。