博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大的矩形 java_最大矩形 - HelloJava菜鸟社区
阅读量:5732 次
发布时间:2019-06-18

本文共 1247 字,大约阅读时间需要 4 分钟。

5ca83f26ebf0e1f37fe1dcd7275e2845.png

6f65f2d938a6286ff8b44cbc58e0e91d.png

export default (arr) => {

let result = []

let reg = /1{2,}/g

// 把二维数组重新表达,把相邻的1提取出来

arr = arr.map(item => {

let str = item.join('')

let r = reg.exec(str)

let rs = []

while (r) {

rs.push([r.index, r.index + r[0].length - 1])

r = reg.exec(str)

}

return rs

})

// 通过递归计算相邻矩阵

let maxRect = (arr, result, n = 1) => {

// 弹出第一行

let top = arr.pop()

// 弹出第二行

let next = arr.pop()

// 记录第一行的每一个起始和截止

let tt

// 记录第二行。。。

let nn

// 记录交叉的其实索引

let start

// 记录交叉的截止索引

let end

let width = 1

let maxWidth = 1

n++

for (let i = 0, il = top.length; i < il; i++) {

tt = top[i]

for (let j = 0, jl = next.length; j < jl; j++) {

nn = next[j]

width = Math.min(tt[1], nn[1]) - Math.max(tt[0], nn[0])

if (width > maxWidth) {

maxWidth = width

start = Math.max(tt[0], nn[0])

end = Math.max(tt[1], nn[1])

}

}

}

// 没有交叉点

if (start === undefined || end === undefined) {

if (n < 3) {

return false

} else {

width = top[0][1] - top[0][0] + 1

if (width > 1) {

result.push((n - 1) * width)

}

}

} else {

arr.push([[start, end]])

maxRect(arr, result, n++)

}

}

while (arr.length > 1) {

// 要值拷贝,因数组在javascript中时引用类型

maxRect([].concat(arr), result)

arr.pop()

}

let max = 0

let item = result.pop()

while (item) {

if (item > max) {

max = item

}

item = result.pop()

}

return max > 0 ? max : -1

}

转载地址:http://bxowx.baihongyu.com/

你可能感兴趣的文章
Spring Cloud版——电影售票系统<六>使用 Spring Cloud Config 统一管理微服务配置
查看>>
Java not support java EE1.3
查看>>
iptables规则备份及恢复、firewalld九个zone,service的操作
查看>>
www.conf配置文件的参数详解
查看>>
如何实现邀请好友帮抢票功能?
查看>>
深圳联通特邀湖北籍企业参观公司总部大楼举行
查看>>
告警系统主脚本、告警系统配置文件、告警系统监控项目
查看>>
Python 和 PyCharm 在 windows10 环境的安装和设置
查看>>
C语言入门基础之数组——数学和编程的完美结合(图)
查看>>
《远见》的读后感作文1000字范文
查看>>
重置密码、单用户模式、救援模式
查看>>
LAMP环境搭建1-mysql5.5
查看>>
第三课 Linux目录及文件管理、用户组管理及bash重定向
查看>>
shell 脚本攻略--小试牛刀
查看>>
spring boot view override
查看>>
bzoj 2282: [Sdoi2011]消防
查看>>
我的友情链接
查看>>
centos5.9使用RPM包搭建lamp平台
查看>>
关于C#面向对象2
查看>>
Javascript String类的属性及方法
查看>>