5.10华为OD机试真题 新系统 - 美观的灯笼 (JavaPyCC++JsGo)

5.10华为OD机试真题 新系统 - 美观的灯笼  (JavaPyCC++JsGo) 美观的灯笼2026 华为OD机试真题 5月10日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述春节将至工人要在古镇老街挂灯笼。街上有 N 个挂灯点每个点因建筑结构不同工人挂上的灯笼的尺寸M也不同数值越大表示灯笼越大。工人认为美观的灯笼必须按非递增尺寸顺序挂置即后续灯笼尺寸不能超过当前灯笼只能相同或更小。工人完成灯笼挂接后需要你代替他判断1、这排灯笼里满足美观定义的最长连续灯笼区域有多少个灯笼2、这段最长连续区域是从哪个挂灯点开始当存在多个最长连续区域时选择最左边的挂灯点2026 华为OD机试真题 5月10日华为OD上机新系统考试真题 100 分题型输入描述N 个正整数 M1≤M≤100表示每个挂灯点所挂的灯笼尺寸。输出描述输出两个整数第一个是符合题意的灯笼数第二个是开始挂灯笼的挂灯点位置从 0 开始计数。示例1输入[5,3,4,4,2,1]输出[4,2]说明灯笼尺寸序列为 [5,3,4,4,2,1]。存在长度为4的非递增连续子序列[4,4,2,1]位置 2−5。示例2输入[5,4,3,2,1]输出[5,0]说明灯笼尺寸序列为 [5,4,3,2,1]。整个序列满足非递增要求长度为 5起始位置为 0。示例3输入[2,2,2,2]输出[4,0]说明灯笼尺寸序列为 [2,2,2,2]。所有灯笼尺寸相等满足非递增要求长度为 4起始位置为 0。解题思路本题要求在一个整数数组中寻找“最长连续非递增子序列”。 具体来说我们需要找到一个连续的区域使得区域内的灯笼尺寸满足 $M_i \ge M_{i1}$并输出该区域的长度和起始位置。如果存在多个长度相同的最长区域返回最左侧的那个即起始位置索引最小的。我们可以使用一次线性遍历来解决这个问题 1.状态初始化 - 使用best_len记录全局最长非递增区域的长度初始为 1即使只有一个灯笼长度也是 1。 - 使用best_start记录全局最长非递增区域的起始位置初始为 0。 - 使用cur_len记录当前正在考察的非递增区域的长度初始为 1。 - 使用cur_start记录当前正在考察的非递增区域的起始位置初始为 0。线性遍历 - 从第二个灯笼索引 $i 1$开始遍历数组。 - 如果当前灯笼的尺寸小于等于前一个灯笼nums[i] nums[i - 1]说明满足非递增要求当前连续区域长度cur_len增加 1。 - 否则说明非递增区域在这里断开我们需要重新开始计算一个新的区域将cur_len重置为 1并将cur_start更新为当前索引 $i$。结果更新 - 在每次迭代的最后检查cur_len是否严格大于best_len。 - 如果是则更新best_len cur_len同时更新best_start cur_start。 - 必须使用“严格大于”这样在遇到长度相同的连续区域时就不会覆盖之前找到的最左侧的结果完美契合题目“存在多个最长连续区域时选择最左边的挂灯点”的要求。复杂度分析时间复杂度$O(N)$。我们只需要对长度为 $N$ 的数组进行一次从头到尾的线性扫描即可得到结果。空间复杂度$O(1)$。只使用了几个常数级别的变量来记录长度和起始位置不需要额外的存储空间不计算存储输入数组本身的空