华为OD机试2025A卷 - 补种未成活胡杨(Java & Python& JS & C++ & C )

本文介绍了华为OD统一考试B卷的补种胡杨树问题,涉及C++、Java、JavaScript和Python四种语言的解题方法。文章提供了题目描述、输入输出格式以及多个测试用例,并提醒考生注意机考的代码查重问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最新华为OD机试

真题目录:点击查看目录
华为OD面试真题精选:点击立即查看

题目描述

近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。

一个月后,有M棵胡杨未能成活。

现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树?

输入描述

N 总种植数量,1 <= N <= 100000

M 未成活胡杨数量,M 个空格分隔的数,按编号从小到大排列,1 <= M <= N

K 最多可以补种的数量,0 <= K <= M

输出描述

最多的连续胡杨棵树

示例1

输入

5
2
2 4
1

输出

3

说明

补种到2或4结果一样,最多的连续胡杨棵树都是3。

示例2

输入

10
3
2 4 7
1

输出

6

说明

种第7棵树,最多连续胡杨树棵数位6(5,6,7,8,9,10)

解题思路

这道题目主要是考察如何通过补种胡杨树,使得胡杨树形成【最长的连续序列】。

示例解释

示例1

输入:

5
2
2 4
1

解释:

  • 胡杨树总共有 5 棵,编号分别是 1, 2, 3, 4, 5。
  • 未成活的胡杨树编号是 2 和 4。
  • 只能补种 1 棵树。

选择补种位置:

  • 可以补种编号为2的树,得到序列 1, 2, 3,最多连续 3 棵树。
  • 或者补种编号为4的树,得到序列 3, 4, 5,同样可以得到最多连续 3 棵树。

因此,输出结果为 3

示例2

输入:

10
3
2 4 7
1

解释:

  • 胡杨树总共有 10 棵,编号分别是 1 到 10。
  • 未成活的胡杨树编号是 2, 4, 7。
  • 只能补种 1 棵树。

选择补种位置:

  • 如果补种编号为7的树,可以形成最长连续序列 5, 6, 7, 8, 9, 10,连续的胡杨树棵数为 6
  • 其他补种选择(如2或4)得到的最长连续胡杨树棵数较少。

因此,输出结果为 6

代码思路

基本与下题一致:

1004. 最大连续1的个数 III

参考题解:https://leetcode.cn/problems/max-consecutive-ones-iii/solutions/608931/zui-da-lian-xu-1de-ge-shu-iii-by-leetcod-hw12/

双指针解法,容易理解

Java

import java