华为 · 栈 · 算法编程题
华为 n ≤ 1e4 时限 3 秒 / 256 MB

题目描述

一位农业科学家正在评估一块狭长试验田的生产潜力。这块试验田被划分为 n 个连续的地块,每个地块都有一个特定的“肥力指数”。
当一组连续的地块被用来种植同一种作物时,整个组的最终产出受到该组中肥力最差的那个地块的限制。这种效应可以用一个“产出系数”来量化,其计算公式为:
产出系数 = 组内最低肥力指数 × 组内地块数量
作为项目负责人,你需要分析所有可能的连续地块组合,计算它们的产出系数,并找出其中可能达到的最大值,以制定最优的种植计划。
给定一个正整数数组 F ,代表了一系列连续地块的肥力指数。你需要计算所有连续非空地块组合的产出系数,并返回其中的最大值。
连续非空地块组合:指一组在原序列中相邻的地块。例如,肥力指数序列为 [10, 20, 30] 的组合包括:
- [10]、[20]、[30]
- [10, 20]、[20, 30]
- [10, 20, 30]

输入输出

输入描述
- 第一行:一个整数 n ,表示地块的总数,其中 1 ≤ n ≤ 10^4 。
- 接下来 n 行:每行一个整数,代表第 i 个地块的肥力指数 F_i ,其中 1 ≤ F_i ≤ 10^4 。
输出描述
- 输出一个整数,代表所有连续组合中可以达到的最大产出系数。

样例共 1 组

样例 1
输入
8
51
50
50
1
14
32
15
2
输出
150

算法解析依据充分

考点:栈

数据规模 n ≤ 1e4 | 限制 3 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 1e4
  • 元素值域:F_i ≤ 1e4(注意整数类型选择,避免溢出)
  • 复杂度门槛:只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
  • 源站时限:3 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:栈

本题切入点

「区间最小值 × 区间长度」的最大值:用单调递增栈对每个元素求出它作为最小值能向左/右扩展到的最远边界,再取 max(a[i]·(r−l+1)),O(n)。

后进先出的结构天然适合处理嵌套、匹配与「最近的更大/更小」问题。

思路框架(栈 通法 · 非本题专属)

  1. 括号匹配:遇左括号入栈,遇右括号检查栈顶是否配对。
  2. 单调栈:从左到右扫,维持栈内单调,遇到破坏单调性的元素就弹栈并结算答案。
  3. 每个元素最多进出栈各一次,总复杂度 O(n)。

实现要点:Python 用 list 当栈(append/pop);判断栈空再取栈顶。

复杂度:时间 O(n) | 空间 O(n)

该范式的通法易错点

  • 栈空时取栈顶。
  • 弹栈时机的判断条件写反。

对照本题

  • 数据规模 n ≤ 1e4,只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
  • 元素值域最大到 1e4 —— 求和 / 相乘时记得开 64 位整数。

样例

样例 1

  • 输入:8 / 51 / 50 / 50 / 1 / 14 / 32 / 15 / 2
  • 输出:150

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2025年秋招-华为-10月10号开发岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解