javascript中将6*6数组转换为3*3数组时出现的问题
我试图解决黑客排名问题,这是问题链接 在这个问题中,我将(6*6)数组转换为3*3数组并传递给其他函数。在3*3阵列的转换中,未获得问题要求所需的阵列结构 我用console.log语句进行调试,并在谷歌上搜索进一步的步骤。我一直坚持按照问题要求构造数组 不过,有一个测试用例以黑客级别运行代码。你能帮我找出错误吗 代码段: 函数getSubArray(arr、tlc、大小){ var a=新数组(); 对于(变量i=tlc[0];ijavascript中将6*6数组转换为3*3数组时出现的问题,javascript,arrays,Javascript,Arrays,我试图解决黑客排名问题,这是问题链接 在这个问题中,我将(6*6)数组转换为3*3数组并传递给其他函数。在3*3阵列的转换中,未获得问题要求所需的阵列结构 我用console.log语句进行调试,并在谷歌上搜索进一步的步骤。我一直坚持按照问题要求构造数组 不过,有一个测试用例以黑客级别运行代码。你能帮我找出错误吗 代码段: 函数getSubArray(arr、tlc、大小){ var a=新数组(); 对于(变量i=tlc[0];i
/*
让我们简单地用不同的方式表示整个问题空间。
让我们把同构的、高阶的JS数组重新设想为两个-
维度代数数组而不是JS数组,因为JS
天生就不适合这样。
首先,一些用于处理数组的实用函数。。。
*/
//计算并返回所有所需子阵列的总和-
//依赖于以不同方式处理JS数组的函数*;
//当前的实现假定形状为正方形的子阵列
//需要{size x size}
功能钙基(arr、大小){
var sums=新数组();
控制台日志(arr.length);
对于(变量i=0;i };代码>不幸的是,Javascript不是python,所以为了解决这个问题,您必须首先扩展标准库。但一旦这一切结束,程序的其余部分就很容易了:
/“库”
功能*iter(it){
屈服于它;
}
函数*zip(…its){
its=its.map(iter);
while(true){
让rs=its.map(it=>it.next());
如果(r.some(r=>r.done))
打破
收益率r.map(r=>r.value);
}
}
函数*slice(it,n){
对于(让x来计算){
如果(--n<0)
产量x;
}
}
函数和(it){
设s=0;
对于(让x来计算)
s+=x;
返回s;
}
函数最大值(it){
设s=-无穷大;
对于(让x来计算)
s=x>s?x:s;
返回s;
}
//“您的程序”
函数*三元组(a){
产量*zip(a,切片(a,1),切片(a,2));
}
函数*和(mat){
对于(让三行(mat))
对于(让[s0,s1,s2]的zip(…rows.map(三元组)))
收益率和(s0)+s1[1]+和(s2);
}
功能解决方案(mat){
返回最大值(总和(mat));
}
//“测试”
让测试=[
[-9, -9, -9, 1, 1, 1,],
[0, -9, 0, 4, 3, 2,],
[-9, -9, -9, 1, 2, 3,],
[0, 0, 8, 6, 6, 0,],
[0, 0, 0, -2, 0, 0,],
[0, 0, 1, 2, 4, 0,],
];
控制台日志(解决方案(测试))代码>问题在于计算沙漏位置的最大值之和,因此没有必要拆分为多个子数组
函数计算
function getSubArray(arr, tlc, size) {
var a = new Array();
for (var i = tlc[0]; i < size + tlc[0]; i++) {
var b = new Array();
for (var j = tlc[1]; j < size + tlc[1]; j++) { // index must be 1
b.push(arr[i][j]);
}
if ((i - tlc[0]) % (size-1)) { // A bit more generic; out of inner loop
b.pop(); // No index
b.shift();
}
a.push(b);
}
console.log(a);
return a;
}