2024华为OD机试E卷 - 猴子吃桃 100分

2024华为OD机试真题,代码包含语言java、js、python、c 代码基本都有详细注释。

题目描述

孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵桃树,每颗树上都有桃子,守卫将在 H 小时后回来。

孙悟空可以决定他吃蟠桃的速度K(个/小时),每个小时选一颗桃树,并从树上吃掉 K 个,如果树上的桃子少于 K 个,则全部吃掉,并且这一小时剩余的时间里不再吃桃。

孙悟空喜欢慢慢吃,但又想在守卫回来前吃完桃子。

请返回孙悟空可以在 H 小时内吃掉所有桃子的最小速度 K(K为整数)。如果以任何速度都吃不完所有桃子,则返回0。

输入描述

第一行输入为 N 个数字,N 表示桃树的数量,这 N 个数字表示每颗桃树上蟠桃的数量。

第二行输入为一个数字,表示守卫离开的时间 H。

其中数字通过空格分割,N、H为正整数,每颗树上都有蟠桃,且 0 < N < 10000,0 < H < 10000。

输出描述

吃掉所有蟠桃的最小速度 K,无解或输入异常时输出 0。

用例

输入

2 3 4 5

4

### 关于华为ODE中的斗地主之顺子题目 #### 题目背景 华为ODE作为最新版本的考,在继承原有ABCD的基础上加入了新的题目类型。其中,“斗地主之顺子”是一个典型的算法设计类问题,主要考察考生对于数组操作、排序以及逻辑判断的能力[^1]。 #### 题目描述 给定一组扑克牌编号列表(假设每张牌都有唯一的整数编号),要求从中找出最长的一组连续顺子序列。所谓顺子是指一系列按顺序排列的数字,例如 `[3, 4, 5, 6, 7]` 是一个长度为5的顺子。需要注意的是,输入数据可能包含重复项或者缺失某些中间值的情况。程序应返回能够构成的最大顺子长度及其起始位置[^2]。 #### 解决方案概述 解决该问题的关键在于如何高效处理数据并识别出符合条件的子序列。以下是具体实现方法: 1. **去重与排序**: 使用集合(Set)去除掉所有重复元素后再将其转换成有序形式以便进一步计算。 2. **动态规划思想应用**: 创建辅助变量记录当前已知最大顺子长度以及临时计数值用于遍历过程中的实时跟踪。 3. **边界条件考虑**: 特殊情况如只有一个唯一元素时需单独讨论以防错误判定。 下面给出基于 Python 的解决方案代码示例: ```python def longest_consecutive(nums): if not nums: return 0 num_set = set(nums) # 去除重复元素 max_length = 0 for num in num_set: if num - 1 not in num_set: # 只有当num是某个潜在顺子的第一个成员才进入此支 current_num = num current_streak = 1 while current_num + 1 in num_set: # 寻找下一个相连的数字直到找不到为止 current_num += 1 current_streak += 1 max_length = max(max_length, current_streak) return max_length # 测用例 test_case = [100, 4, 200, 1, 3, 2] print(longest_consecutive(test_case)) # 输出应该是4因为存在[1, 2, 3, 4] ``` 上述函数通过构建无序集合来快速查找是否存在相邻数字,并利用简单的循环结构实现了时间复杂度接近O(n)的效果。 #### 复杂度- 时间复杂度:由于采用了哈希表(set)来进行常量级查询操作,整体流程大致维持在线性级别即 O(N),这里 N 表示原始数组大小。 - 空间复杂度:额外开辟了一个同等规模的空间存储独一无二的数据副本因此也是 O(N)[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值