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].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新闻社称:“如果某人真正达到那个万亿元里程碑,他或她将与油气资源丰厚的沙特阿拉伯具有相同价值。”乐施会表示现在世界正处于“分裂之初”,呼吁开启“公共行动新时代”以缩小财富差距。
注:作为快船队小卡球迷,不得不说,这两年快船老板鲍尔默确实赚麻了。
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
奥卡姆的剃刀定律:在诸多相互竞争的理论中,选择假设最小的,也即最简单的可能就是最正确的,切勿浪费较多东西去做那些用较少东西同样可以做好的事情。