华为od 机试真题 Java 实现【补种未成活胡杨】

博客介绍了华为在线开发者(OD)机试中的一道算法题,要求在已知胡杨树种植情况和可补种数量下,通过Java实现找到补种胡杨树以获得最多连续成活树木的方法。问题采用滑动窗口法解决,重点在于理解题意和应用算法。

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

         所有题目均有五种语言实现。C实现目录C++ 实现目录Python实现目录Java实现目录JavaScript实现目录

题目

【补种未成活胡杨】

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

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

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

输入描述

N 总种植数量

M 未成活胡杨数量

M 个空格分隔的数,按编号从小到大排列

K 最多可以补种的数量

其中:

1 <= N <= 100000

1 <= M <= N

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)

### 华为OD真题及答案解析 以下是一些典型的华为OD题目及其解析,涵盖不同类型的算法和逻辑问题。这些问题基于引用内容以及常见的考点进行整理。 --- #### 1. **TLV解析** TLV(Type-Length-Value)是一种数据编码格式,常用于网络协议中。在华为OD中,可能会要求实现TLV解析功能。 **题目描述** 给定一个字符串表示的TLV序列,解析出其中的所有字段,并输出解析结果。每个字段由Type、Length和Value三部分组成[^1]。 **代码示例** ```go package main import ( "fmt" ) func tlvParse(data []byte) [][]byte { var result [][]byte for len(data) > 0 { if len(data) < 3 { break } t := data[0] l := int(data[1]) if len(data) < 2+l { break } v := data[2 : 2+l] result = append(result, v) data = data[2+l:] } return result } func main() { data := []byte{1, 5, 'H', 'e', 'l', 'l', 'o', 2, 3, 'G', 'o', '!' } parsed := tlvParse(data) for _, v := range parsed { fmt.Println(string(v)) } } ``` --- #### 2. **最大报酬问题** 这是一个经典的动态规划问题,通常以“最大报酬”形式出现。 **题目描述** 给定一系列工作,每份工作有对应的时长和报酬。在总时长限制T内,选择一些工作使得总报酬最大化[^2]。 **代码示例** ```python def max_reward(jobs, T): dp = [0] * (T + 1) for job in jobs: time, reward = job for t in range(T, time - 1, -1): dp[t] = max(dp[t], dp[t - time] + reward) return dp[T] # 示例输入 jobs = [(2, 50), (3, 70), (4, 90)] T = 5 print(max_reward(jobs, T)) # 输出:120 ``` --- #### 3. **数大雁问题** 该问题要求统计字符串中“quack”叫声的数量。 **题目描述** 给定一个字符串,只包含字符‘q’, ‘u’, ‘a’, ‘c’, ‘k’,统计其中完整的“quack”叫声数量[^3]。 **代码示例** ```python def count_quack(s): pattern = "quack" count = [0] * 5 result = 0 for c in s: if c == 'q': if count[4] > 0: count[4] -= 1 result += 1 count[0] += 1 elif c in pattern: idx = pattern.index(c) if count[idx - 1] > 0: count[idx - 1] -= 1 count[idx] += 1 if any(count[:4]): return -1 return result # 示例输入 s = "quackquack" print(count_quack(s)) # 输出:2 ``` --- #### 4. **补种成活胡杨** 该问题涉及数组操作和贪心算法。 **题目描述** 给定N棵胡杨树的状态,其中有M棵成活,最多可以补种K棵胡杨树。计算最终存活的胡杨树数量[^4]。 **代码示例** ```python def resupply_resurrection_trees(N, M, deadTrees, K): deadTrees = set(deadTrees) res = N - M for i in range(1, N + 1): if i in deadTrees and K > 0: res += 1 K -= 1 return res # 示例输入 N, M, K = 5, 2, 1 deadTrees = [2, 4] print(resupply_resurrection_trees(N, M, deadTrees, K)) # 输出:4 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MISAYAONE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值