LeetCode 面试题 16.11. 跳水板 85. 最大矩形 84. 柱状图中最大的矩形

面试题 16.11. 跳水板

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。
示例:
输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diving-board-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

两种长度的木板,k个,所有长度的可能中,短木板个数i从0到k,长木板从k到0,一共k+1中可能。
因为结果需要排序,只需把第一种可能(全为短木板)放在数组最前,而后依次把短木板换一个换成长木板即可(后一个的总长度是前一个总长度加上长短木板长度的差值)

  • 需要注意,
  • 题中所给条件,K有可能等于0,在这种情况,巧妇难为无米之炊,返回一个空数组
  • 长短木板长度有可能相等,此时把长木板换成短木板并没有变化,总长度只有一个可能
class Solution {
   
    public int[] divingBoard(int shorter, int longer, int k) {
   
        if(k==0){
   
            return new int[0];
        }else if(shorter==longer){
   
            return new int[]{
   shorter*k};
        }
        int[] ans=new int[k+1];
        int step=longer-shorter;
        ans[0]=shorter*k;
        for(int i=1;i<ans.length;i++){
   
            ans[i]=ans[i-1]+step;
        }
        return ans;
    }
}


85. 最大矩形

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[
[“1”,“0”,“1”,“0”,“0”],
[“1”,“0”,“1”,“1”,“1”],
[“1”,“1”,“1”,“1”,“1”],
[“1”,“0”,“0”,“1”,“0”]
]
输出: 6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-rectangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

首先,这里说的“矩形” 严格意义上来说,可以说是点阵

在我眼里,把矩形看成一个一个的横线方便解题:
我们有如下的一个矩阵:

  • 我们先做一个统计:每个点开始往右,有多少个连续的“1”
  • 也就是计算,对每个点来说,它向右的“线”的“长度”


得到这个矩阵:

如上所说,这个矩阵描述了每一个点向右线段的长度,
那么,对于一列来说,比如说第一列(1,1,5,1),表达了这样的信息:

我们显然可以得到左边为这一列的所有可能矩形中,最大的一个
最简单粗暴的方式:两层循环遍历所有可能的上边的所在行和下边的所在行
对于一个特定的上边和下边,我们对应最大的面积就是,上边到下边的距离最短边
比如:对于第三行一行,最大面积应该是1
5;
但是, 对于第二行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值