【每日一练】JAVA算法求柱状图中最大的矩形面积

news2024/12/27 13:15:21

文章目录

    • 前言
    • 题目
    • 分析
    • 算法
    • 实战
      • 1、创建算法方法
      • 2、创建测试用例
      • 3、查看测试结果
    • 写在最后

前言

作为一名以JAVA语言为主的搬砖人,学习掌握好函数语法很重要,但是算法也是需要掌握的。今天我们就分享一个求柱状图中最大的矩形面积的题目,这个题目较为简单。

题目

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
在这里插入图片描述

以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
在这里插入图片描述

图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

示例:
输入: [2,1,5,6,2,3]
输出: 10

分析

1、根据题意我们可以知道数组元素就是各个柱状图的高度,宽度默认都是1;
2、形成矩形肯定是一个或多个相邻的柱子组合而成,这个组合的矩形面积是最短的柱子高度乘以总的宽度

算法

1、从第一个柱子作为起点,依次与后续柱子组合;
2、默认起始长方形宽度为1,每组合一个柱子宽度+1,后续柱子高度减少则组成的长方形高度减少;
3、根据每个组合计算该组形成的长方形面积,与最大面积比较(初始面积默认0);
4、根据第3步骤比较结果,如果大于最大面积则替换最大面积元素组合以及最大面积;
5、循环2、3、4步骤,最后的组合则是可以组成最大面积的组合,最后的面积就是最大面积。

实战

我们用JAVA语言演示

1、创建算法方法

/**
 * 最大面积计算
 * 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
 * 求在该柱状图中,能够勾勒出来的矩形的最大面积。
 * @author senfel
 * @version 1.0
 * @date 2023/4/17 14:08
 */
public class AreaDemo {

    /**
     * 获取最大面积
     * @param array 柱子高度数组,宽度默认1
     * @author senfel
     * @date 2023/4/17 14:09
     * @return int
     */
    public static int getMaxArea(int[] array){
        //初始化面积
        int maxArea = 0;
        if(array == null || array.length == 0){
            return maxArea;
        }
        //初始化数组
        StringBuffer maxEleStr = new StringBuffer();
        for(int i=0;i<array.length;i++){
            //组成当前长方形的元素
            StringBuffer currentEleStr = new StringBuffer();
            //宽度
            int width = 1;
            //高度
            int nowHeight = array[i];
            //组合的初始元素
            currentEleStr.append(array[i]);
            if(maxArea < width * nowHeight){
                maxArea = width * nowHeight;
                maxEleStr =currentEleStr;
            }
            //依次与后续柱子组合
            for(int j = i+1;j<array.length;j++){
                //长方形宽度增加
                width++;
                if(array[j] < nowHeight){
                    //长方形高度减少
                    nowHeight = array[j];
                }
                if(maxArea < width * nowHeight){
                    //组成长方形的元素
                    if(j>i){
                        currentEleStr.append(",");
                    }
                    currentEleStr.append(array[j]);
                    maxArea =  width * nowHeight;
                    maxEleStr = currentEleStr;
                }
            }
        }
        System.err.println("组成最大长方形的元素为:["+maxEleStr.toString()+"]");
        return maxArea;
    }

}

2、创建测试用例

@SpringBootTest
class DemoApplicationTests {

    /**
     * 计算组成最大面积长方形
     * @author senfel
     * @date 2023/4/17 15:06
     * @return void
     */
    @Test
    public void areaTest(){
        int[] array = {2,1,5,6,2,3};
        int maxArea = AreaDemo.getMaxArea(array);
        System.err.println("组成最大长方形的最大面积为:"+maxArea);
    }
}

3、查看测试结果

见证奇迹的时刻

组成最大长方形的元素为:[5,6]
组成最大长方形的最大面积为:10

写在最后

JAVA计算柱状图中最大的矩形面积算法较为简单,只要从第一个到最后一个元素依次与后续元素进行组合判断即可。其中重难点是后续元素大小决定了长方形的高度,以及每增加一个元素长方形的宽度也要增加,只要把握住这两个点写出算法轻而易举。

路漫漫其修远兮,吾将上下而求索
有兴趣的小伙伴也可以加我:
订阅号 ‘架构集结号’
知识星球 ‘Coding社区’

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/440437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

torch.utils.data.DataLoader中的next(iter(train_dataloader))

在做实验时&#xff0c;我们常常会使用用开源的数据集进行测试。而Pytorch中内置了许多数据集&#xff0c;这些数据集我们常常使用DataLoader类进行加载。 如下面这个我们使用DataLoader类加载torch.vision中的FashionMNIST数据集。 from torch.utils.data import DataLoader …

数据结构入门(C语言)顺序表的增删查改

目录 前言1. 顺序表的概念2. 动态顺序表2.1 顺序表的初始化与销毁2.2 顺序表的尾插容量检查2.3 顺序表的尾删2.4 顺序表的头插2.5 顺序表的头删2.6 固定位置的插入2.7 固定位置的删除2.8 查找和打印2.9 修改元素主函数部分(菜单) 结语 前言 本章会用C语言来描述数据结构中的顺…

协同运力、算力、存力,加速迈向智能世界

2023年4月20日&#xff0c;华为在HAS2023期间举办“迈向智能世界”主题论坛&#xff0c;吸引了来自全球的分析师、专家学者及媒体与会。会上&#xff0c;华为ICT战略与Marketing总裁彭松发表了“持续技术创新&#xff0c;加速迈向智能世界”的主题演讲。 华为ICT战略与Marketin…

zabbix监控linux主机

1.本实验使用centos7主机&#xff0c;IP地址为10.1.60.115&#xff0c;firewalld和selinux服务已关闭 2.下载zabbix yum源(与zabbix server用一样的版本) rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 3.安装zabbix客户…

玛雅水上乐园|玩趣系列作品集

玛雅水上乐园曾经是一座历史悠久的玛雅金字塔&#xff0c;曾用于宗教和水上航行&#xff0c;被废弃了 3000 多年。现在&#xff0c;01a1 工作室已将其改造成一个令人兴奋的旅游景点&#xff0c;在这里你可以享受美食和饮料&#xff0c;享受日光浴&#xff0c;并结交新朋友。所以…

从零学习SDK(8)SDK的集成和部署

选择使用SDK与其他平台和服务进行集成和部署的好处有&#xff1a; 简化开发流程&#xff0c;节省时间和成本&#xff0c;无需从零开始编写复杂的代码逻辑。 保证功能的稳定性和兼容性&#xff0c;避免出现各种潜在的错误和问题。 享受SDK提供方的技术支持和更新&#xff0c;获…

L频段GaN功率放大器的设计关键点

氮化镓技术的不断进步促使设备在更高的功率、电源电压和频率下工作。 ​图1 QPD1013 晶体管的照片 如图1所示&#xff0c; QPD1013晶体管采用0.50 μm GaN-on-SiC技术。它采用具有成本效益的6.6x7.2 mm DFN(双边扁平无引脚)封装&#xff0c;与传统的金属陶瓷封装相比&#xff…

ROS学习——rotors仿真下载与运行

rotors 无人机仿真主要分为两类&#xff1a;硬件在环仿真&#xff08;HITL&#xff09;和软件在环仿真&#xff08;SITL全称Software in the loop&#xff09;。 无人机软件在环仿真是指完全用计算机来模拟出无人机飞行时的状态&#xff0c;而硬件在环仿真是指计算机连接飞控…

【ArcGIS Pro二次开发】(22):生成分级用地编码和名称

在国土空间规划中&#xff0c;用地用海分类采用三级分类体系&#xff0c;共设置24种一级类、106种二级类及39 种三级类。在某些场景中&#xff0c;需要按等级归类并汇总统计。 这个小工具的作用就是通过用地编码生成三级地类&#xff0c;作为后续统计的基础。 一、要实现的功能…

研读Rust圣经解析——Rust learn-3(变量与可变性,数据类型)

研读Rust圣经解析——Rust learn-3&#xff08;变量与可变性&#xff0c;数据类型&#xff09; 变量|常量与可变性变量声明案例为什么不可变变量可变&#xff08;mut关键字&#xff09;变量可变&#xff08;覆盖&#xff09; 常量声明 数据类型标量类型整型整型字面值整型溢出问…

ECShop开源商城与COS互通:降低本地存储负载、提升访问体验

ECShop简介 ECShop是一款开源电子商务平台&#xff0c;具有简单易用、安全稳定、模块化设计等特点。它提供了完整的电子商务解决方案&#xff0c;包括商品管理、订单管理、支付管理、配送管理、会员管理、促销管理、数据统计等功能。ECShop支持多语言、多货币、多种支付方式和配…

防火墙做网关双链路接入不同ISP

USG作为校园或大型企业出口网关可以实现内网用户通过两个运营商访问Internet可以实现外网用户访问内网服务器&#xff0c;并保护内网不受网络攻击。 组网需求&#xff1a; 某学校网络通过USG连接到Internet&#xff0c;校内组网情况如下&#xff1a; 校内用户主要分布在教学…

【Java|golang】2409. 统计共同度过的日子数---golang中全局变量带来的坑

Alice 和 Bob 计划分别去罗马开会。 给你四个字符串 arriveAlice &#xff0c;leaveAlice &#xff0c;arriveBob 和 leaveBob 。Alice 会在日期 arriveAlice 到 leaveAlice 之间在城市里&#xff08;日期为闭区间&#xff09;&#xff0c;而 Bob 在日期 arriveBob 到 leaveBo…

CTFWIKI-PWN-ret2libc

目录 1.libc 2.plt 和got 3.调用system 4.flat函数 5.libc泄露 例题1 checksec ida 计算偏移量 查找system.plt 查找/bin/sh 1.ida 2.ROPgadget exp 例题2 checksec ida 思路 给出流程图 查看bss是否可以写入 exp 例题3 checksec ida 偏移量 找puts的go…

投屏市场的挑战与发展趋势

投屏的定义 投屏是指将手机、平板、电脑等设备的屏幕内容无线传输到电视、投影仪等大屏幕上的技术&#xff0c;也称为无线投屏、屏幕镜像、屏幕共享等。投屏技术可以实现多屏互动、内容共享、远程协作等功能&#xff0c;为用户提供更丰富的视听体验和更便捷的工作方式。 投屏市…

Jupyter Notebook小知识

目录 1 快捷键1.1 常用快捷键1.2 魔法函数 2 常用快捷键2.1 模式切换2.2 命令模式快捷键2.3 编辑模式快捷键3 Matplotlib绘图 4 小技巧4.1 文件默认目录的查看以及更改4.2 更改主题颜色 5 其它5.1 python中 r, b, u, f 的含义5.2 f/format():格式化操作 6 常见问题6.1 查看模块…

25K测试老鸟6年经验的面试心得,四种公司、四种问题…

这里总结了下自己今年的面试情况 先说一下自己的个人情况&#xff0c;普通二本计算机专业毕业&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能。趁着金三银四跳槽季&#xff0c;面试字节跳动测试岗技术面都已经过了&#xff0c;本来以为是…

基于OC端的Bridge-API组件化应用

前言 在移动应用开发中&#xff0c;组件化可以提高代码的模块化和重用性&#xff0c;降低耦合度。当下大部分APP都至少包含一到两种Hybrid框架&#xff0c;H5基本是必要的&#xff0c;还可能叠加React Natvie、Weex或Flutter。 对于Hybird来说&#xff0c;Native的很多能力是…

Ae:自动定向

Ae 菜单&#xff1a;图层/变换/自动定向 Auto-Orient 快捷键&#xff1a;Ctrl Alt O 自动定向 Auto-Orient是 Ae 图层中的一个附加的、隐藏实现&#xff08;不会在时间轴面板上更改属性的值&#xff09;的功能&#xff0c;它可以使得图层自动旋转或改变方向以朝向指定的运动路…

HIVE相关操作

HIVE有两种启动方式 方式1&#xff1a; bin/hive 即Hive的Shell客户端&#xff0c;可以直接写SQL方式2&#xff1a; bin/hive --service hiveserver2 后台执行脚本&#xff1a;nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 & bin/hiv…