博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MS第二题解题思路
阅读量:2352 次
发布时间:2019-05-10

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

周二进行了MS的面试,一面的第二题没有做出来,当时和面试官说了,回来好好想想,然后把思路贴在博客上,虽然面试官高可能也不会来看。但是还是自己总结一下吧!题目和一样,有两种思路。

第一种思路
也就是走之前面试官提示的思路。基于假设把矩阵沿着某一行分开,然后把分开的行作为底面,将自底面往上的矩阵看成一个直方图(histogram)。直方图的中每个项的高度就是从底面行开始往上1的数量。根据Largest Rectangle in Histogram就可以求出当前行作为矩阵下边缘的一个最大矩阵。接下来如果对每一行都做一次Largest Rectangle in Histogram,从其中选出最大的矩阵,那么它就是整个矩阵中面积最大的子矩阵。
第二种思路
采用动态规划的思想。从第一行开始一行一行地处理,使[i, j]处最大子矩阵的面积是(right(i, j)-left(i, j))*height(i, j)。其中height统计当前位置及往上’1’的数量;left和right是高度是当前点的height值得左右边界,即是以当前点为中心,以height为高度向两边扩散的左右边界。

递推公式如下:

left(i, j) = max(left(i-1, j), cur_left);right(i, j) = min(right(i-1, j), cur_right);height(i, j) = height(i-1, j) + 1, if matrix[i][j]=='1';

height(i, j) = 0, if matrix[i][j]==’0’.

其中cur_left和cur_right的值由当前行决定,如果当前位置是’1’,则cur_left和cur_right都不变;如果当前位置是’0’,则cur_left就为当前位置的右侧,cur_right就为当前位置。

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

你可能感兴趣的文章
Elasticsearch 7.x生产配置
查看>>
AccessDeniedException: /opt/elasticsearch-7.0.0/config/elasticsearch.keystore
查看>>
bootstrap-table 父子表 联动表 完整例子
查看>>
Spring Cloud 2.x完整入门Demo样例(Greenwich版本)
查看>>
Spring Cloud 2.x学习笔记:2、feign改进(Greenwich版本)
查看>>
SpringCloud 2.x学习笔记:3、Hystrix(Greenwich版本)
查看>>
SpringCloud 2.x学习笔记:4、Zuul(Greenwich版本)
查看>>
ajax提交JSON数组及Springboot接收转换为list类
查看>>
SpringCloud 2.x学习笔记:5、Config(Greenwich版本)
查看>>
RabbitMQ安装、配置与入门
查看>>
Java异常
查看>>
Ibatis代码自动生成工具
查看>>
ant build.xml教程详解
查看>>
彻底理解ThreadLocal
查看>>
localhost与127.0.0.1的区别
查看>>
windows下的host文件在哪里,有什么作用?
查看>>
【工具】人脸识别比对开放平台汇总
查看>>
基于DirectUI技术开发的发卡系统
查看>>
STM32 HAL库、标准外设库、LL库(STM32 Embedded Software)
查看>>
51和AVR单片机
查看>>