Jon*_*hoi 6 javascript algorithm multidimensional-array
考虑这个数组:
[
["B", "C", "C", "C", "C", "B", "B", "C", "A", "A"],
["B", "A", "C", "B", "B", "A", "B", "B", "A", "A"],
["B", "C", "B", "C", "A", "A", "A", "B", "C", "B"],
["B", "B", "B", "A", "C", "B", "A", "C", "B", "A"],
["A", "A", "A", "C", "A", "C", "C", "B", "A", "C"],
["A", "B", "B", "A", "A", "C", "B", "C", "C", "C"],
["C", "B", "A", "A", "C", "B", "B", "C", "A", "A"]
]
Run Code Online (Sandbox Code Playgroud)
我试图获得这个2D数组中面积最大的矩形的宽度和高度.答案应该是8*4 = 32(坐标(1,1),(1,8),(4,1)和(4,8)),因为它具有相同角的最大区域"A".
只是因为很有趣:
var l = [
["B", "C", "C", "C", "C", "B", "B", "C", "A", "A"],
["B", "A", "C", "B", "B", "A", "B", "B", "A", "A"],
["B", "C", "B", "C", "A", "A", "A", "B", "C", "B"],
["B", "B", "B", "A", "C", "B", "A", "C", "B", "A"],
["A", "A", "A", "C", "A", "C", "C", "B", "A", "C"],
["A", "B", "B", "A", "A", "C", "B", "C", "C", "C"],
["C", "B", "A", "A", "C", "B", "B", "C", "A", "A"]];
var squares = [];
//for each position
for (var column=0; column< l[0].length; column++)
for (var row=0; row< l.length ; row++ )
//look for all scuares from this position:
for (var next_column = column+1; next_column < l[0].length; next_column++ )
if ( l[row][next_column] == l[row][column] )
for (var next_row = row+1; next_row < l.length; next_row++)
//if it is a square
if (l[next_row][column] == l[row][column] &&
l[next_row][next_column] == l[row][column])
//annotate square
squares.push( [ column, row, next_column, next_row ] );
//get areas from squares
var area_l = squares.map(function(an_square) {
return (an_square[2]-an_square[0]+1)*(an_square[3]-an_square[1]+1);
});
//search for big area
var max_area_index = area_l.indexOf(Math.max( ...area_l ));
//here it is
console.log( squares[max_area_index] );
Run Code Online (Sandbox Code Playgroud)
结果:数组(4) [1, 1, 8, 4]
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |