博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode85 maximal rectangle
阅读量:4221 次
发布时间:2019-05-26

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

Given a 2D binary matrix filled with 0’s and 1’s, find the largest rectangle containing all ones and return its area.

思路:

借鉴了leetcode84 的算法,首先对输入的矩阵进行预处理
一开始没有考虑到输入数据的形式是[‘00’,’00’]
以为是[[0,0],[0,0]] 报了很多惨绝人寰的errorT^T情人节不能这样虐我啊
数据处理
[‘01’,’01’]-> [[0,1],[0,2]]
矩阵每一行用leetcode84求直方图最大面积方法求出该行可以达到的最大面积,用max函数保存最大的面积即可

class Solution(object):    def maximalRectangle(self,matrix1):        matrix=[]        maxValue=0        #initial        if not len(matrix1):            return 0        matrix.append([])        for row in range(len(matrix1[0])):            matrix[0].append(int(matrix1[0][row]))        for col in range(1,len(matrix1)):            matrix.append([])            for row in range(len(matrix1[0])):                if not int(matrix1[col][row]):                    matrix[col].append(0)                else:                        matrix[col].append(int(matrix1[col][row])+int(matrix[col-1][row]))        for col in range(len(matrix)):             maxValue=max(maxValue,self.largestRectangleArea(matrix[col]))                 #print matrix        return maxValue    def largestRectangleArea(self,heights):        Stack_Numbers=[]        Stack_Index=[]        maxS=0        for i in range(len(heights)):            if not len(Stack_Numbers):                if heights[i]:                    Stack_Numbers.append(heights[i])                    Stack_Index.append(i)            else:                if heights[i]>=Stack_Numbers[-1]:                    Stack_Numbers.append(heights[i])                    Stack_Index.append(i)                else:                    if heights[i]:                        for k in range(len(Stack_Numbers)):                            if Stack_Numbers[k]>heights[i]:                                temp=Stack_Index[k]                                for h in range(len(Stack_Numbers)-k):                                    maxS=max(maxS,(i-Stack_Index[k+h])*Stack_Numbers[k+h])                                break                                   for h in range(len(Stack_Numbers)-k):                            Stack_Numbers.pop()                            Stack_Index.pop()                        if heights[i]:                            Stack_Numbers.append(heights[i])                            Stack_Index.append(temp)                    else:                        for k in range(len(Stack_Numbers)):                            maxS=max(maxS,(i-Stack_Index[k])*Stack_Numbers[k])                        for k in range(len(Stack_Numbers)):                            Stack_Numbers.pop()                            Stack_Index.pop()        if len(Stack_Numbers):            for k in range(len(Stack_Numbers)):                maxS=max(maxS,(len(heights)-Stack_Index[k])*Stack_Numbers[k])        return maxS

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

你可能感兴趣的文章
机器学习:Python实现聚类算法(三)之总结
查看>>
使用sklearn做单机特征工程
查看>>
Python 多线程技巧 用threading.Event代替time.sleep()
查看>>
工具】Cmake与gcc的关系
查看>>
struct中长度为0的数组用途与原理
查看>>
svm笔记
查看>>
C++ 继承&多态
查看>>
C++多继承的观察和7点体会(都是实用派的观点) good
查看>>
python socket编程详细介绍
查看>>
高人对libsvm的经典总结(全面至极)
查看>>
Linux下c语言多线程编程
查看>>
火狐下easyui1.3.*弹出window框定位不到中间解决把办法
查看>>
Hadoop启动报错NoClassDefFoundError: javax/activation/DataSource解决方案
查看>>
Python爬虫来啦,抓取数据导出到excel,简单明了,强大,直接贴代码
查看>>
Docker拉取镜像失败报错Error response from daemon: Get https://registry-1.docker.io解决办法
查看>>
IO操作的工具类总结
查看>>
对指定文件或目录进行压缩和解压缩的工具类总结
查看>>
Java中如何遍历Map对象的4种方法
查看>>
图片延时加载例子详解
查看>>
js获取url参数值的两种方式详解
查看>>