【华为上机真题 2022】太阳能板的最大面积

news2024/9/24 17:14:16

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

二、解题思路

三、代码实现

四、时间复杂度


🍓🍓🍓 更多 华为上机真题点击 华为历年上机真题100例【精讲】🎉🎉🎉

一、题目描述

给航天器一侧加装长方形或正方形的太阳能板,需要先安装两个支柱,再在支柱上安装太阳能板。但是航天器不同位置的支柱长度不同,太阳能板的安装面积受限于最短一侧的那根支柱长度

现在提供一组整型数组作为支柱的高度数据,假设每根支柱间距离相等为 1 个单位长度,计算如何选择两根支柱可以使太阳能板的面积最大。

1.1 输入描述

10,9,8,7,6,5,4,3,2,1

注意:支柱至少有 2 根,最多10000 根,能支持的高度范围 1~10^9 的整数。柱子的高度是无序的,例子中的递减只是巧合。

1.2 输出描述

25

说明:在 10 米高的支柱和 5 米高的支柱上安装,这两根支柱间宽度为 5,高度取最小的支柱高 5,面积即为 25。任取其他两根支柱所能获得的面积都小于 25。所以面积最大为 25。

二、解题思路

本题有点难度,和 84. 柱状图中最大的矩形 类似,主要解题思路是要知道太阳能面板的宽和高,太阳能面板面积 = 宽 x 高。

那么,我们可以遍历所有支柱,以当前支柱的高为高,那么包含当前支柱的最大宽度为:当前支柱的左右两侧各找连续的大于等于当前支柱高度的所有柱子。

例如:有 6 根支柱,高度分别为:2,1,5,6,2,3。那么以各个支柱为高度的太阳能面板的最大面积为:

支柱 1:高度为 2,最左边为到 2,最右边也为到 2,那么以支柱 1 为高度的太阳能面板的最大面积为 0;

支柱 2:高度为 1,最左边为到 2,最右边为到 3,那么以支柱 2 为高度的太阳能面板的最大面积为 5;

支柱 3:高度为 5,最左边为到 5,最右边为到 6,那么以支柱 3 为高度的太阳能面板的最大面积为 5;

支柱 4:高度为 6,最左边为到 6,最右边为到 6,那么以支柱 4 为高度的太阳能面板的最大面积为 0;

支柱 5:高度为 2,最左边为到 5,最右边为到 3,那么以支柱 5 为高度的太阳能面板的最大面积为 6;

支柱 6:高度为 3,最左边为到 3,最右边为到 3,那么以支柱 6 为高度的太阳能面板的最大面积为 0。

三、代码实现

代码实现如下所示。

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <stack>
using namespace std;

int largestArea(vector<int>& h)
{
    int n = h.size();
    vector<int> left(n), right(n);

    stack<int> st;
    for (int i = 0; i < n; ++i) {
        while (!st.empty() && h[st.top()] >= h[i]) {
            st.pop();
        }
        left[i] = (st.empty() ? -1 : st.top());
        st.push(i);
    }

    st = stack<int>();
    for (int i = n - 1; i >= 0; --i) {
        while (!st.empty() && h[st.top()] >= h[i]) {
            st.pop();
        }
        right[i] = (st.empty() ? n : st.top());
        st.push(i);
    }

    int ans = 0;
    for (int i = 0; i < n; ++i) {
        ans = max(ans, (right[i] - left[i] - 2) * h[i]);
    }

    return ans;
}

int main()
{
    string str;
    while (cin>>str) {
        stringstream stream(str);
        vector<int>g;
        while (getline(stream, str, ',')) {
            g.push_back(atoi(str.c_str()));
        }
        int ans = largestArea(g);
        cout<<ans<<endl;
    }
    return 0;
}

四、时间复杂度

时间复杂度:O(n)

在上述代码中,需要两次 for 循环遍历元素,所以时间复杂度 O(n)。

🍓🍓🍓 更多 华为上机真题点击 华为历年上机真题100例【精讲】🎉🎉🎉


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


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

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

相关文章

ArcGIS基础实验操作100例--实验27细分栅格

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验27 细分栅格 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff1a;使用…

oneblog博客系统 让你的博客实现图片显示的功能

背景 \ 闲来无事&#xff0c;希望捣腾捣腾计算机&#xff0c;玩一玩网络&#xff0c;自己搭一个博客系统。那么在家搭建一个自己的服务器&#xff0c;并且让别人通过你的博客系统与你交流。多么神奇的事情。 在搭建博客系统的过程中&#xff0c;你需要在后台写好文章。但是在上…

网赚不要当苦力,流量变现才是王道

事实上&#xff0c;大多数互联网从业者脑子里只想到一件事。无脑搬砖一个月挣一万多元。不可否认&#xff0c;有这样的副业&#xff0c;但也需要前提条件。你需要在早期阶段努力工作&#xff0c;然后才能分批赚钱。这是两个概念&#xff0c;一开始就听话。 我从来不建议你做那…

leetcode 155. 最小栈-java题解

题目所属分类 辅助栈 或者一个栈 原题链接 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部…

关于gets()与scanf()输入字符串与\0,\n,空格之间的问题

我们都知道输入字符串的话&#xff0c;用gets()函数与scanf()加%s的话都是可以的。同时&#xff0c;一个字符串的结尾默认有一个\0也是老生常谈。 空格 gets() 1. 当gets()碰到空格时就把它当成一个普通的字符来看&#xff0c;没有任何特殊之处可言。 scanf() 1. 如果再输入…

【自学Python】Python特点

Python特点 Python特点教程 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&#xff0c;相比其他语言经常使用英文关键字&#xff0c;其他语言的一些标点符号&#xff0c;它具有比其他语言更有特色语法结构。 Py…

计算机组成原理实验——一、ALU实验

一、实验目的 1.掌握ALU模块的组成和接口&#xff0c;理解ALU的功 能。 2.通过编程调用ALU模块计算斐波那契数。 3.掌握Verilog中多模块编程方法和实现。 二、实验内容 用 Verilog 设计一个算术运算单元 ALU&#xff0c;采 用纯组合逻辑设计&#xff0c;32bit 宽。 利用该 …

2022(终)最后一篇博客—继承和多态

目录 文章目录 一、继承 1.1为什么要继承 1.2继承概念 1.3继承的语法 1.4成员访问 1.5方法访问 1.6初始化代码块 1.7继承方式 二、多态 1.1多态的概念 1.2多态实现条件 1.3动态绑定与静态绑定 1.4向上转型与向下转型 1.5多态的优缺点 1.6需要注意的地方&#x…

【王道操作系统】1.1.2 操作系统的特征(并发、共享、虚拟、异步)

操作系统的特征(并发、共享、虚拟、异步) 文章目录操作系统的特征(并发、共享、虚拟、异步)1.操作系统特征&#xff1a;并发2.操作系统特征&#xff1a;共享3.操作系统特征&#xff1a;虚拟4.操作系统特征&#xff1a;异步操作系统是一种系统软件&#xff0c;但与其它系统软件和…

NXP的mfgtool镜像烧写工具是如何对EMMC进行分区的

本来是想在IMX6ULL板卡上实现u-boot中显示开机logo的功能的&#xff0c;过程中就牵扯出了这几个问题。大概的缘由是修改了u-boot后&#xff0c;想在系统中直接对EMMC中u-boot进行更新&#xff0c;就不用通过SD卡或USB重新烧写了&#xff1b;在更新的时候&#xff0c;又需要知道…

猿如意程序代码生成实践与测试

ChatGPT中国区申请无法直接注册与使用&#xff1b; 使用csdn提供的猿如意效率工具箱提供的chatGPU功能实现智能程序编写实验&#xff1a; 先安装&#xff1a; csdn猿如意下载地址 选择其中的ChatGPT菜单 在右侧窗口中的输入框&#xff0c;可输入问题内容。 &#xff08;1&a…

〖产品思维训练白宝书 - 产品思维认知篇⑥〗- 职场人面临困惑与迷茫应该如何破局?

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

Leetcode:459. 重复的子字符串(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 移动匹配法&#xff1a; 原理思路&#xff1a; 利用kmp法&#xff1a; 原理思路&#xff1a; 暴力法&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给定一个非空的字符串 s &#xff0c;检查是否可以…

55 处理错误的树形数据结构导致不断地添加元素到集合中 OOM

前言 呵呵 这是最近一个 前同事/朋友 碰到的一个问题 主要的问题是 在 dump 文件中发现了很多 LinkedList$Node 的节点 然后 整个问题 抛出来的错误是 OOM 呵呵 这种问题 还是相当好处理的 这里 仅仅是 简单记录一下 前因 后果 测试用例 /*** Test11OomByTree** aut…

关于2022年

也算是传统了&#xff0c;每年到年底的时候&#xff0c;总喜欢做点总结&#xff0c;或许类似于企业里面的年底复盘&#xff0c;但更多的还是碎碎念。往年一般会放在农历新年那一天&#xff0c;今年做点小改变&#xff0c;影响不大。 回顾过去的一年&#xff0c;发现自己基本上…

【HR-VITON】虚拟换衣算法pre-processing复现全过程记录

Link of original Github repo Link of personal made study case of HR-VITON ContentPre1、OpenPose&#xff08;On colab, need GPU&#xff09;2、Human ParseMethod 1: ColabMethod 2: Local or Server3、DensePose (On colab, GPU or CPU)4、Cloth Mask (On colab, GPU o…

【MySQL】InnoDB数据页结构

文章目录1. 前言2. 数据页结构3. 记录在页中的存储4. 记录头信息5. 页目录&#xff08;Page Directory&#xff09;6. 页面头部&#xff08;Page Header&#xff09;7.文件头部&#xff08;Fiile Header&#xff09;8. 文件尾部&#xff08;File Trailer&#xff09;不知不觉20…

JVM调优相关说明

前言 其实听着JVM调优这个词有些高大上&#xff0c;但是等你真正了解了他的内在原理后&#xff0c;还是很容易的。再简单 JVM调优大致可分为如下&#xff1a; 解决JVM运行过程中的问题&#xff08;主要就是内存溢出的问题&#xff09;优化JVM运行时的环境&#xff0c;提高运…

多线程问题(四)

目录 一、常见的锁策略 1、乐观锁 VS 悲观锁 2、读写锁 VS 普通的互斥锁 3、重量级锁 VS 轻量级锁 4、挂起等待锁 VS 自旋锁 6、公平锁 VS 非公平锁 7、可重入锁 VS 不可重入锁 8、synchronized锁的性质 二、CAS 1、CAS的伪代码 2、CAS的应用 a、实现原子类…

【Spring系列】一篇文章开启你的 SpringBoot 之旅

SpringBoot 快速入门一. 环境搭建1.1 环境准备Java环境准备(本人是 JDK 1.8)开发工具 IntelliJ IDEAMaven (可使用 IntelliJ IDEA 自带)二. 快速开始2.1 新建项目打开IDEA 新建 SpringBoot 项目2.2 运行项目Spring Boot 项目运行分析尝试在浏览器中访问2.3 完成第一个接口新建c…